运行 docker-setup.sh 后,通过浏览器访问 http://127.0.0.1:18789 无法打开页面。
常见错误信息:
Health check failed: gateway closed (1006 abnormal closure) Gateway target: ws://127.0.0.1:18789 Bind: loopback
# 查看所有容器状态 docker compose ps -a
预期输出:
NAME COMMAND STATUS openclaw-gateway-1 "node dist/index.js ga..." Up X minutes openclaw-cli-1 "node dist/index.js on..." Exit 0
检查要点:
- ✅
openclaw-gateway-1状态应该是Up - ❌ 如果显示
Exited或不存在,需要启动容器
docker compose logs openclaw-gateway | tail -50
正常情况应该看到:
[gateway] listening on ws://0.0.0.0:18789 (PID 7) [canvas] host mounted at http://0.0.0.0:18789/__openclaw__/canvas/ [browser/service] Browser control service ready
异常情况:
- ❌
Bind: loopback– 绑定模式错误 - ❌
Health check failed– 健康检查失败 - ❌
EADDRINUSE– 端口被占用
# 进入 gateway 容器 docker compose exec openclaw-gateway bash # 检查主进程 ps aux | head -5 # 检查 node 进程 ps aux | grep node | grep -v grep # 测试内部连接 curl http://127.0.0.1:18789
预期结果:
- PID 1 应该是
node dist/index.js gateway ... - 有多个 node 进程在运行
curl应该返回 HTML 内容
症状:
# 在容器内执行 ps aux | head -5 # 显示: # node dist/index.js onboard --no-install-daemon
原因:进入的是 openclaw-cli 容器(onboarding),而不是 openclaw-gateway 容器。
解决方法:
# 退出当前容器 exit # 确认 gateway 容器运行 docker compose ps # 进入正确的容器 docker compose exec openclaw-gateway bash
症状:
[gateway] Bind: loopback Health check failed: gateway closed
原因:onboarding 期间选择了 loopback 而不是 lan。
Docker 环境下必须使用 lan 绑定,因为:
loopback(127.0.0.1) 只在容器内部可访问lan(0.0.0.0) 允许通过 Docker 端口映射从宿主机访问
解决方法:
方法 1 – 修改配置文件(推荐):
# 在宿主机上执行 sed -i.bak 's/"bind": "loopback"/"bind": "lan"/g' ~/.openclaw/openclaw.json # 重启容器 docker compose restart openclaw-gateway
方法 2 – 使用 openclaw configure:
docker compose exec openclaw-gateway node dist/index.js configure
症状:
docker compose ps # openclaw-gateway-1 状态是 Exit 123
解决方法:
# 启动 gateway 容器 docker compose up -d openclaw-gateway # 查看启动日志 docker compose logs -f openclaw-gateway
症状:
Error: listen EADDRINUSE: address already in use :::18789
解决方法:
# 检查宿主机端口占用 lsof -i :18789 # 如果被其他进程占用,停止该进程或修改端口 export OPENCLAW_GATEWAY_PORT=18788 docker compose up -d openclaw-gateway
docker compose ps openclaw-gateway # 状态应该是 "Up"
docker compose logs openclaw-gateway | tail -10 # 应该看到: # [gateway] listening on ws://0.0.0.0:18789
# 从宿主机测试 curl -v http://127.0.0.1:18789 # 应该返回 HTML 内容 # 在容器内测试 docker compose exec openclaw-gateway curl http://127.0.0.1:18789 # 应该返回 HTML 内容
打开浏览器访问:
- 不带 token:
http://127.0.0.1:18789 - 带 token:
http://127.0.0.1:18789/#token=YOUR_TOKEN
应该看到 OpenClaw 控制界面。
OpenClaw 在 Docker 中运行两个容器:
| 容器 | 用途 | 命令 |
|---|---|---|
| openclaw-cli | 执行命令、onboarding | node dist/index.js onboard |
| openclaw-gateway | 运行 gateway 服务 | node dist/index.js gateway |
两个容器通过 volume 挂载共享配置:
- 配置目录:
~/.openclaw→/home/node/.openclaw - 工作目录:
~/.openclaw/workspace→/home/node/.openclaw/workspace
| 文件 | 宿主机路径 | 容器内路径 |
|---|---|---|
| 配置文件 | ~/.openclaw/openclaw.json | /home/node/.openclaw/openclaw.json |
| Docker Compose | /path/to/openclaw/docker-compose.yml | – |
| 日志文件 | – | /tmp/openclaw/openclaw-*.log |
在 Docker 环境中,onboarding 时应该选择:
- ✅ LAN (0.0.0.0) – 允许从宿主机访问
- ❌ Loopback (127.0.0.1) – 仅容器内部可访问
在 docker-compose.yml 或 .env 文件中设置:
OPENCLAW_GATEWAY_BIND=lan OPENCLAW_GATEWAY_PORT=18789 OPENCLAW_GATEWAY_TOKEN=your-token-here
修改 docker-compose.yml 的端口映射:
ports: - "127.0.0.1:18789:18789" # 仅绑定到 localhost,不暴露到公网
# 查看所有容器状态 docker compose ps -a # 查看 gateway 日志 docker compose logs -f openclaw-gateway # 重启 gateway docker compose restart openclaw-gateway # 进入 gateway 容器 docker compose exec openclaw-gateway bash # 查看 gateway 配置 docker compose exec openclaw-gateway cat /home/node/.openclaw/openclaw.json # 健康检查openclaw docker compose exec openclaw-gateway node dist/index.js health --token "YOUR_TOKEN"
- 官方文档:https://docs.openclaw.ai/gateway/health
- 故障排查:https://docs.openclaw.ai/gateway/troubleshooting
- Gateway 配置:https://docs.openclaw.ai/gateway/configuration
- Docker 远程访问:https://docs.openclaw.ai/gateway/remote
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/256208.html原文链接:https://javaforall.net
