1. 腾讯云宝塔面板部署 openclaw 后公网 IP 访问不通的完整排查链路
腾讯云服务器上装好 openclaw,容器也跑起来了,docker ps看着一切正常,结果浏览器输入公网 IP 就是转圈、超时、连接被拒绝——这个场景我遇到过不止一次。openclaw 是一个可自托管的 AI 网关/助手服务,能对接多种模型通道、跑本地 Agent 任务,适合想在自己服务器上掌控数据、又需要统一模型入口的开发者。它默认只监听127.0.0.1,加上腾讯云安全组、宝塔反代、Docker 网络三层叠加,任何一层没打通,公网就是进不去。
这篇按「从外到内」的顺序拆:先看腾讯云安全组端口有没有放行,再看 Docker 端口映射和监听地址,然后看宝塔反向代理配置,最后看 openclaw 自身的网关鉴权与绑定模式。每一层我都给出可复制的命令和配置片段,以及对应的curl验证方式,你可以逐层排除,不用瞎猜。
排查的核心思路是:公网请求要经过 安全组 → 服务器防火墙 → Nginx/宝塔反代 → Docker 端口映射 → 容器内进程监听这条链路,任何一环断了都会表现为「公网 IP 访问不通」。所以不要一上来就改 openclaw 配置,先确认前面几层是通的。
我试过最典型的坑:容器用--net=host启动了,但 openclaw 网关默认绑定127.0.0.1:18789,宿主机上curl 127.0.0.1:18789通,curl 公网IP:18789不通。这时候问题不在安全组,而在进程监听地址。下面逐层展开。
2. TaoToken 统一通道前置准备与 openclaw 网关鉴权配置
openclaw 本身是网关,它需要对接上游模型通道才能真正干活。如果你只是想让公网能访问到 openclaw 的 Web 界面,那这一节可以先跳过;但如果你要让它调用模型、跑 Agent,就需要一个稳定的统一通道。TaoToken 提供的就是这种统一入口,官网地址是 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 端点是 https://taotoken.net/api 。
在 openclaw 里配置上游通道,通常是在它的配置文件里指定 Base URL、API Key 和 Model ID 三件套。openclaw 的配置目录一般挂载在/home/node/.openclaw,你可以通过docker exec -it openclaw cat /home/node/.openclaw/config.json查看当前配置。如果要用 TaoToken 作为统一通道,配置片段大致如下(JSON 格式,路径以你实际挂载为准):
{ "gateway": { "mode": "local", "bind": "lan", "port": 18789 }, "providers": { "taotoken": { "baseUrl": "https://taotoken.net/api", "apiKey": "sk-你的TaoToken密钥", "model": "claude-sonnet-4-20250514" } } }这里gateway.bind设成lan是关键,它让网关监听所有网卡而不是只监听回环。gateway.mode设成local是为了绕过新版本的安全检查——2026.3.11 之后的版本如果没设这个,启动时会被Gateway start blocked: set gateway.mode=local (current: unset) or pass --allow-unconfigured拦住。
API Key 的获取入口在 https://taotoken.net/api-keys ,登录后创建即可。如果你打算长期跑编码类 Agent 任务,可以了解下 Coding Plan: https://taotoken.net/coding-plan 。模型对话调试入口在 https://taotoken.net/chat ,接入文档在 https://taotoken.net/doc 。
需要强调的是,TaoToken 在这里的角色是「模型通道」,不是「网络通道」。它解决的是 openclaw 调用模型时的统一鉴权和路由问题,不解决公网访问问题。公网访问不通,还是要回到安全组、Docker、反代这三层去查。把这两件事分开,排查思路会清晰很多。
配置改完后,重启容器让配置生效:docker restart openclaw。然后进入容器确认配置被读取:docker exec -it openclaw cat /home/node/.openclaw/config.json | grep -A3 gateway。
3. 腾讯云安全组 + Docker 端口映射 + 宝塔反代的可复制配置
这一节是重头戏,把三层配置全部给全。先说你最容易漏的:腾讯云安全组。
登录腾讯云控制台 → 轻量应用服务器或云服务器 CVM → 找到你的实例 → 防火墙/安全组 → 添加入站规则。你需要放行的是最终对外暴露的端口。如果你用宝塔反代,对外只需要放行 80 和 443;如果你直接暴露 openclaw 端口,那就放行对应端口(比如 18789)。规则配置参考:
| 方向 | 协议 | 端口 | 来源 | 说明 |
|---|---|---|---|---|
| 入站 | TCP | 80 | 0.0.0.0/0 | HTTP,宝塔反代用 |
| 入站 | TCP | 443 | 0.0.0.0/0 | HTTPS,宝塔反代用 |
| 入站 | TCP | 18789 | 0.0.0.0/0 | 仅调试时临时开放,生产建议关 |
放行后,在服务器上用curl从外部验证端口是否真的通了。你可以在本地电脑执行telnet 你的公网IP 80,或者用在线端口检测工具。如果 80 不通,先别往下查,安全组或服务器防火墙(firewalld/ufw)还没放行。
接下来是 Docker 端口映射。openclaw 的启动命令有两种写法,效果不同:
# 写法一:host 网络模式,容器直接使用宿主机网络栈 docker run -d \ --name openclaw \ --restart unless-stopped \ --net=host \ -v openclaw-data:/home/node/.openclaw \ ghcr.m.daocloud.io/openclaw/openclaw:2026.3.11 # 写法二:bridge 模式,显式映射端口 docker run -d \ --name openclaw \ --restart unless-stopped \ -p 18789:18789 \ -v openclaw-data:/home/node/.openclaw \ ghcr.m.daocloud.io/openclaw/openclaw:2026.3.11--net=host的好处是容器直接用宿主机端口,不用做映射,但前提是容器内进程监听的是0.0.0.0而不是127.0.0.1。如果 openclaw 网关只监听回环,host 模式下公网照样不通。这时候要么改配置让gateway.bind=lan,要么在启动命令里加--bind lan。
如果你用 bridge 模式加-p映射,同样要确保容器内监听0.0.0.0。-p 18789:18789只是把宿主机端口转发到容器端口,容器内如果只听127.0.0.1,转发进去也是拒绝连接。
然后是宝塔反向代理。进入宝塔面板 → 网站 → 添加站点,域名填你要用的域名(比如claw.yourdomain.com),PHP 版本选「纯静态」。创建后点进站点设置 → 反向代理 → 添加反向代理:
# 宝塔反代核心配置(在站点设置的反向代理里填) 代理名称:openclaw 目标 URL:http://127.0.0.1:18789 发送域名:$host保存后,宝塔会自动生成 Nginx 配置。你可以手动检查一下/www/server/panel/vhost/nginx/claw.yourdomain.com.conf,确认proxy_pass指向正确。如果 openclaw 容器用的是 bridge 模式且映射到宿主机 18789,那proxy_pass http://127.0.0.1:18789就是对的。如果你之前把容器端口映射成了 3000,那这里就写 3000。
一个常见错误是反代目标写成了容器 IP(比如http://172.17.0.2:18789)。容器 IP 会变,重启后可能就失效了,应该统一走宿主机端口。
4. curl 验证请求与成功结果对照
配置改完,别急着开浏览器,先用curl逐层验证。这样出问题时你能精确定位是哪一层。
第一层,验证宿主机本地能否访问 openclaw:
curl -v http://127.0.0.1:18789/如果返回Connection refused,说明 openclaw 进程没监听这个端口,或者监听在别的端口。进容器查:docker exec -it openclaw netstat -tlnp | grep 187。如果看到127.0.0.1:18789而不是0.0.0.0:18789,那就是绑定模式问题,需要在配置里设gateway.bind=lan或启动时加--bind lan。
第二层,验证宿主机公网 IP 能否访问:
curl -v http://你的公网IP:18789/如果本地127.0.0.1通但公网 IP 不通,检查安全组是否放行了 18789,以及服务器防火墙。腾讯云轻量服务器默认有防火墙,ufw status或firewall-cmd --list-ports看一下。
第三层,验证宝塔反代是否生效:
curl -v -H "Host: claw.yourdomain.com" http://127.0.0.1/如果返回 openclaw 的页面内容,说明反代通了。如果返回宝塔默认页或 404,检查反代配置是否保存、Nginx 是否重载(nginx -t && nginx -s reload)。
第四层,验证域名解析和公网访问:
curl -v http://claw.yourdomain.com/成功的话你会看到 openclaw 的响应头,比如HTTP/1.1 200 OK或者重定向到登录页。如果卡在Trying xxx.xxx.xxx.xxx...,说明 DNS 没解析或安全组没放行 80。
一个完整的成功响应大概长这样:
< HTTP/1.1 200 OK < Server: nginx < Content-Type: text/html; charset=utf-8 < Connection: keep-alive如果 openclaw 开启了鉴权,可能会返回 401 或跳转到登录页,这属于正常。你要区分「网络不通」和「鉴权拦截」——前者是连接超时/拒绝,后者是能连上但返回 401/403。
5. 本篇常见错误排查:401、local proxy failed、reading choices、OAuth
这一节把几个高频报错单独拎出来对照。
报错一:Gateway start blocked: set gateway.mode=local (current: unset) or pass --allow-unconfigured
这是 openclaw 2026.3.11 之后新增的安全检查。解决方式有两种:在配置文件里设"gateway": {"mode": "local"},或者在启动命令里加--allow-unconfigured。推荐用配置文件方式,持久化更稳。
报错二:local proxy failed或connection refused
这个通常出现在 openclaw 尝试调用上游模型通道时。检查你的 Base URL 是否写对,TaoToken 的 API 端点是https://taotoken.net/api,不要漏掉/api路径。另外检查 API Key 是否有效,可以在 https://taotoken.net/api-keys 重新生成一个测试。
报错三:reading choices或unexpected end of JSON input
这是模型返回格式解析失败,常见原因是 Base URL 指向了一个不兼容 OpenAI 格式的端点,或者 Model ID 写错了。确认你的 Model ID 和通道支持的模型一致。如果用的是 TaoToken 统一通道,Model ID 按文档里列出的填。
报错四:OAuth 相关报错
如果你在 openclaw 里配置了需要 OAuth 的通道,回调地址必须和你在通道侧登记的一致。公网访问不通的情况下,OAuth 回调根本回不来,所以先把公网链路打通再配 OAuth。
报错五:openclaw-2026.3.11.tar.gz: No such file or directory
这是导入镜像时路径不对。用find / -name "openclaw-*.tar.gz" 2>/dev/null找到实际路径,再执行gunzip -c 实际路径 | docker load。
排查时记住一个原则:先确认网络层通不通,再确认应用层报什么错。网络层用curl -v和telnet验证,应用层看容器日志docker logs -f openclaw。两者分开,效率高很多。
6. 打通公网后的模型通道接入与长期使用建议
公网能访问只是第一步,接下来是让 openclaw 真正跑起来。如果你还没配模型通道,建议用 TaoToken 统一入口,这样 Base URL、Key、Model ID 三件套一次配好,后面换模型只改 Model ID 就行。API Key 在 https://taotoken.net/api-keys 创建,接入文档在 https://taotoken.net/doc 有完整的参数说明。
对于长期跑编码类 Agent 任务的场景,Coding Plan 会比按量调用更划算,入口在 https://taotoken.net/coding-plan 。如果你只是想先验证模型能不能通,用模型对话页面 https://taotoken.net/chat 发一条消息最快。
最后给几个实操建议:生产环境别直接暴露 openclaw 端口到公网,走宝塔反代加 HTTPS;安全组只放行 80 和 443,18789 只在调试时临时开;容器重启策略用--restart unless-stopped,服务器重启后自动拉起;配置文件和 data 目录一定要挂载出来,不然容器重建数据就没了。把这些做完,你的 openclaw 在腾讯云上就算真正跑稳了。