一、问题描述
容器明明还在运行,端口映射也检查了好几遍,但就是死活打不开 https://localhost:18789 这个地址。OpenClaw的Web界面始终无响应,这到底是怎么回事?

二、问题根源
问题往往出在配置向导上——它可能在你不经意间,修改了Web UI的绑定地址,或者顺手开启了身份验证机制,导致外部访问被拦在了门外。
那么,常见的原因有哪些?
- 配置文件中的
bind被设置成loopback或127.0.0.1,只允许容器内部访问 - 启用了Token或密码验证,访问时缺少凭证
- 认证模式配置不当,直接拒绝所有请求
三、排查步骤
步骤1:确认容器是否还在运行
俗话说得好,先确认“它还在”。
docker ps | Select-String "openclaw"
- ✅ 如果看到状态为
Up,说明容器还在喘气,可以继续往下走 - ❌ 如果没有任何输出,或者状态是
Exited,说明容器已经挂了
顺手看看错误日志,可能能抓到一些线索:
docker logs openclaw --tail=50
步骤2:检查端口映射是否正常
接下来,确认端口映射没丢:
docker port openclaw
正常情况下,你应该看到类似这样的输出:18789/tcp -> 0.0.0.0:18789
- ✅ 输出正确,说明端口映射没问题
- ❌ 输出为空,或者端口对不上,那映射确实丢了
步骤3:查看容器日志
日志里藏着大量信息,重点关注这几个关键词:
docker logs openclaw 2>&1 | Select-String -Pattern "token|http|listening|bind"
看看日志里有没有这些提示:
Gateway listening on https://0.0.0.0:18789- 服务正常监听,一切正常Access with token: https://localhost:18789?token=xxxx- 需要Token才能访问bind address already in use- 端口被占用了permission denied- 权限问题在作祟
步骤4:重启容器
有时候,重启能解决80%的问题——试试看:
docker restart openclaw
等待10-20秒,让容器重新启动完毕,然后再次访问 https://localhost:18789。
四、问题解决
问题1:bind设置为loopback
症状:你可能会发现,配置文件里写着 "bind": "loopback"。这行小字的意思就是:“老子只跟容器内部的人玩,外面的别来沾边。”
解决方法:
- 编辑配置文件
Z:Toolsdockeropenclawdataopenclaw.json - 找到
"bind": "loopback"这一行 - 把它改成:
"bind": "0.0.0.0"
或者直接删掉这一行,让它用默认值也行。
- 保存文件,然后重启容器:
docker restart openclaw
问题2:启用了Token认证
症状:日志里明确告诉你,需要Token才能访问。
解决方法:
- 从日志里找到完整的Token URL,它长这样:
Access with token: https://localhost:18789?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
- 直接复制这个URL,在浏览器里打开就行。
问题3:需要密码登录
症状:访问时浏览器弹出一个密码输入框,仿佛在问:“天王盖地虎?”
解决方法:
如果你设置了环境变量密码,就输入:Perfect1@34
问题4:认证模式设置为必须验证
症状:所有访问都被无情拒绝,连个提示都没有。
解决方法:
- 编辑配置文件
Z:Toolsdockeropenclawdataopenclaw.json - 添加或修改认证模式,把“必须验证”改成“不验证”:
{
"gateway": {
"auth": {
"mode": "none"
}
}
}
- 保存并重启容器。
重要提醒:把认证关了,意味着凡是能摸到你电脑端口的人,都能直接操控OpenClaw。这可不是闹着玩的——只在个人电脑或完全可信的内网环境这么干。
五、完整配置文件示例
这里是一份经过验证的参考配置,直接拿去用吧:
{
"bind": "0.0.0.0",
"gateway": {
"auth": {
"mode": "password"
}
},
"models": {
"providers": {
"ollama": {
"baseUrl": "https://host.docker.internal:11434",
"apiKey": "ollama-local"
}
}
},
"agents": {
"defaults": {
"model": {
"primary": "ollama/deepseek-r1:latest"
}
}
}
}
六、验证修复
1. 确认bind配置已更改
先查查配置是否生效:
docker exec openclaw Select-String -Pattern "bind" /home/node/.openclaw/openclaw.json
应该能看到 "bind": "0.0.0.0" 这一行。
2. 测试Web访问
在浏览器里试试:
https://localhost:18789
或者换个方式:
https://127.0.0.1:18789
3. 检查服务状态
最后,跑个日志确认服务已经就绪:
docker logs openclaw 2>&1 | Select-String -Pattern "listening|ready"
七、终极解决方案
如果以上方法都试过了,OpenClaw还是不给面子,那就别挣扎了——直接删掉容器,重新建一个,保留数据卷就行:
# 停止并删除容器 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:Toolsdockeropenclawdata:/home/node/.openclaw" ` -v "Z:Toolsdockeropenclawconfig:/app/config" ` -e OLLAMA_BASE_URL=https://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:Toolsdockeropenclawdataopenclaw.json备份一份,防患于未然。 - 记录关键配置:像Token、密码这些重要信息,记下来,别等用时找不到。
- 使用固定版本镜像:尽量别用
latest版本,避免版本更新带来的配置不兼容问题。
