OpenClaw Docker部署必须按模式精准配置端口:全容器化需在docker-compose.yml中设"18789:18789"和"5000:5000";混合模式需在.env中设OPENCLAW_GATEWAY_PORT=18789、BIND=lan,并放行宿主机18789端口;Worker须能通过内部网络访问master:5000。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

OpenClaw Docker部署时端口配置错误会导致Web UI无法访问、Worker节点连不上Master、Telegram Bot收不到消息,甚至整个平台启动后白屏或报502错误。必须在容器编排文件或环境变量中显式声明端口映射关系,不能依赖默认值。
确认服务模式再配端口
先判断你部署的是单机全容器化(Master+Worker+DB全在Docker内),还是主机网关+Docker Worker混合模式。前者端口由docker-compose.yml统一定义;后者网关运行在宿主机,端口由.env文件控制,且【OPENCLAW_GATEWAY_BIND=lan必须设置】,否则Docker容器内的Worker根本连不上宿主机上的网关。
用ps aux | grep openclaw查进程:如果看到python main.py或openclaw gateway在宿主机跑,就是混合模式;如果只有docker-compose相关进程,就是全容器化模式。
全容器化部署的端口配置
打开项目根目录下的docker-compose.yml,找到master服务区块:
把ports字段改成以下两行(不可省略冒号前的空格):
- "18789:18789"
- "5000:5000"
第一行映射网关HTTP/WebSocket端口,第二行映射内部RPC通信端口。注意:【不要写成"18789:80"或"8080:18789"】,OpenClaw网关监听的就是18789,容器内端口必须与宿主机端口一致,否则UI加载失败。
如果要用Nginx反向代理,这里只保留"18789:18789",5000端口不用暴露到外网。
主机网关 + Docker Worker模式的端口配置
这种模式下,网关不进容器,直接跑在宿主机上,端口由.env文件控制:
OpenClaw 自我进化框架一键部署。安装宪法(AGENTS.md)、可进化灵魂(SOUL.md)、心跳系统、PARA三层记忆架构、目标管理,并通过场景化对话引导用户定义 Agent 性格。自动配置 EvoClaw(审批制进化)和 Self-Improving Agent(自主学习)。触发场景:"setup o...
第一步:编辑.env文件,确保包含这三行:
OPENCLAW_GATEWAY_PORT=18789
OPENCLAW_GATEWAY_BIND=lan
OPENCLAW_MASTER_URL=http://localhost:5000
第二步:检查宿主机防火墙是否放行18789端口(Ubuntu用sudo ufw allow 18789,CentOS用sudo firewall-cmd --add-port=18789/tcp --permanent)。
第三步:启动网关前,先执行lsof -i :18789确认该端口未被占用。若提示“command not found”,先装lsof:sudo apt install lsof(Ubuntu)或sudo yum install lsof(CentOS)。
Worker节点连接Master的端口验证
Worker容器必须能访问Master的5000端口,这个端口只在Docker内部网络生效,不对外暴露:
① 进入Worker容器:docker exec -it openclaw-worker-1 sh
② 测试连通性:telnet master 5000(如果提示未安装telnet,改用nc -zv master 5000)
③ 如果显示Connected to master,说明Docker内部网络和端口配置正确;如果超时或拒绝连接,检查docker-compose.yml里master服务的ports是否误删了- "5000:5000"这一行,或者depends_on顺序是否写反。

















