OpenClaw无法访问问题排查指南
一、问题描述
容器正在运行,端口已正确映射,但无法通过 http://localhost:18789 访问OpenClaw Web界面。
二、问题根源
配置向导可能修改了Web UI的绑定地址或启用了身份验证机制,导致外部无法正常访问。
常见原因:
- 配置文件中的
bind被设置 为loopback或127.0.0.1 - 启用了Token或密码身份验证
- 配置文件中的认证模式设置不当
三、排查步骤
步骤1:确认容器是否还在运行
powershell
docker ps | Select-String "openclaw"
- ✅ 如果看到状态为
Up,说明容器还在运行,继续下一步 - ❌ 如果没有输出或状态为
Exited,说明容器意外退出
查看错误日志:
powershell
docker logs openclaw --tail=50
步骤2:检查端口映射是否正常
powershell
docker port openclaw
预期输出:18789/tcp -> 0.0.0.0:18789
- ✅ 如果输出正确,继续下一步
- ❌ 如果输出为空或端口不对,说明端口映射丢失
步骤3:查看容器日志
powershell
docker logs openclaw 2>&1 | Select-String -Pattern "token|http|listening|bind"
重点关注:
Gateway listening on http://0.0.0.0:18789- 服务正常监听Access with token: http://localhost:18789?token=xxxx- 需要Token访问bind address already in use- 端口被占用permission denied- 权限问题
步骤4:重启容器
powershell
docker restart openclaw
等待10-20秒后,再次访问 http://localhost:18789
四、问题解决
问题1:bind设置为loopback
症状 :配置文件中的 "bind": "loopback" 导致Web UI只允许容器内部访问
解决方法:
-
编辑配置文件
Z:\Tools\docker\openclaw\data\openclaw.json -
找到
"bind": "loopback"这一行 -
修改为:
json"bind": "0.0.0.0"或者直接删除该行(使用默认值)
-
保存文件
-
重启容器:
powershelldocker restart openclaw
问题2:启用了Token认证
症状:日志中显示需要Token才能访问
解决方法:
-
从日志中找到完整的Token URL:
Access with token: http://localhost:18789?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... -
直接使用该URL访问
问题3:需要密码登录
症状:访问时弹出密码输入框
解决方法:
使用设置的环境变量密码:Perfect1@34
问题4:认证模式设置为必须验证
症状:所有访问都被拒绝
解决方法:
-
编辑配置文件
Z:\Tools\docker\openclaw\data\openclaw.json -
添加或修改认证模式:
json{ "gateway": { "auth": { "mode": "none" } } } -
保存并重启容器
⚠️ 注意:禁用认证会让任何能访问该端口的人直接控制OpenClaw,仅在个人电脑或内网环境使用。
五、完整配置文件示例
以下是推荐的配置文件内容:
json
{
"bind": "0.0.0.0",
"gateway": {
"auth": {
"mode": "password"
}
},
"models": {
"providers": {
"ollama": {
"baseUrl": "http://host.docker.internal:11434",
"apiKey": "ollama-local"
}
}
},
"agents": {
"defaults": {
"model": {
"primary": "ollama/deepseek-r1:latest"
}
}
}
}
六、验证修复
1. 确认bind配置已更改
powershell
docker exec openclaw Select-String -Pattern "bind" /home/node/.openclaw/openclaw.json
应该显示 "bind": "0.0.0.0"
2. 测试Web访问
在浏览器中访问:
http://localhost:18789
或尝试:
http://127.0.0.1:18789
3. 检查服务状态
powershell
docker logs openclaw 2>&1 | Select-String -Pattern "listening|ready"
七、终极解决方案
如果以上方法都不奏效,可以删除容器并重新创建(保留数据卷):
powershell
# 停止并删除容器
docker stop openclaw
docker rm openclaw
# 重新创建容器
docker run -d `
--name openclaw `
--restart always `
-p 18789:18789 `
--add-host=host.docker.internal:host-gateway `
-v "Z:\Tools\docker\openclaw\data:/home/node/.openclaw" `
-v "Z:\Tools\docker\openclaw\config:/app/config" `
-e OLLAMA_BASE_URL=http://host.docker.internal:11434 `
-e DEFAULT_MODEL=deepseek-r1:latest `
ghcr.io/openclaw/openclaw:latest
八、补充说明
为什么会出现bind设置为loopback?
配置向导中某个选项(如安全提示)可能导致自动生成了 loopback 配置。在容器环境下,loopback 只允许容器内部访问,对外不可见。
Windows防火墙检查
如果依然连接失败,检查Windows Defender防火墙,确保没有阻止Docker的网络访问。
端口冲突检查
如果18789端口被其他程序占用,可以:
- 查找占用端口的进程:
netstat -ano | Select-String "18789" - 结束占用进程或使用其他端口
九、预防措施
- 一劳永逸的配置方法 :使用环境变量和
--add-host参数创建容器 - 定期备份配置文件 :备份
Z:\Tools\docker\openclaw\data\openclaw.json - 记录关键配置:记录Token、密码等重要信息
- 使用固定版本镜像:避免使用latest版本导致配置不兼容