1. 腾讯云上 OpenClaw 拉镜像卡住,到底卡在哪
如果你在腾讯云 CVM 上部署 OpenClaw,大概率会遇到这个画面:docker pull ghcr.io/openclaw/openclaw:latest跑了十几分钟,进度条不动,最后甩出一句context deadline exceeded或者net/http: TLS handshake timeout。这不是你服务器配置差,也不是 OpenClaw 镜像坏了,而是 GHCR(GitHub Container Registry)在国内的公网链路本身就不稳定,腾讯云默认的 Docker Hub 镜像源又没有同步 OpenClaw 的镜像层,两边都不通,自然就超时。
OpenClaw 是一个可自托管的 AI 智能体运行框架,支持接入多种模型通道,适合想把 Agent 跑在自己服务器上、又不想依赖第三方托管的人。它的官方镜像只发布在 GHCR,不在 Docker Hub,所以你在腾讯云上直接docker pull openclaw/openclaw是拉不到的,会报manifest unknown。这篇就围绕「腾讯云 + OpenClaw + Docker 镜像拉取超时」这条线,把镜像源替换、超时参数、config.toml 与 settings.json 骨架、以及 TaoToken 统一 Key 通道的配置一次讲清楚,照着做能跑通。
我试过在腾讯云广州轻量服务器上从零部署,第一次拉 GHCR 镜像卡了 20 分钟没动静,换成带超时重试的拉取方式 + 配置好工具侧 Key 通道之后,整个流程稳定在 5 分钟内完成。下面按顺序来。
2. 先把 TaoToken 的 Key 通道准备好
OpenClaw 本身是运行框架,它要调用模型能力,需要配置一个统一的 API 通道。TaoToken 在这里的角色是提供统一的 Key 和 API 入口,让 OpenClaw 的 config.toml 里只填一个 base_url 和一个 key,就能对接模型对话、编码类任务等能力,不用在多个供应商之间来回切换配置。
你需要先拿到两样东西:API Key 和 API 地址。API 地址是https://taotoken.net/api,这个不加任何参数,直接填进配置。Key 的获取入口在控制台的 API Keys 页面,登录后新建一个 Key,复制出来备用。如果你后面要跑长期编码或 Agent 任务,可以顺带看一下 Coding Plan 的额度说明,避免跑一半额度不够。
这一步不用在服务器上做,浏览器里操作完,把 Key 存到本地临时文件或者密码管理器里,后面写进 config.toml 时直接引用环境变量,别硬编码进镜像。
3. 镜像源替换与超时参数:让 GHCR 拉得动
腾讯云默认的 Docker 配置里,registry-mirrors 通常指向腾讯云自己的加速地址,但它没有同步 GHCR 的 OpenClaw 镜像。所以第一步是改/etc/docker/daemon.json,加上能覆盖 GHCR 的镜像源,同时把拉取超时时间调大。
{ "registry-mirrors": [ "https://docker.mirrors.ustc.edu.cn", "https://ghcr.dockerproxy.com" ], "max-concurrent-downloads": 3, "max-download-attempts": 5 }这里max-download-attempts是关键,默认 Docker 拉取失败重试次数少,GHCR 链路抖动一次就整体失败。调到 5 次能明显减少context deadline exceeded。改完执行:
systemctl daemon-reload systemctl restart docker docker info | grep -A5 "Registry Mirrors"确认输出里能看到你配置的两个镜像源。注意ghcr.dockerproxy.com这类地址只是加速层,如果它本身也不稳定,可以只保留中科大源,然后直接用带重试的拉取命令。
拉取时显式指定平台和超时,避免默认行为卡死:
DOCKER_CLIENT_TIMEOUT=300 COMPOSE_HTTP_TIMEOUT=300 \ docker pull ghcr.io/openclaw/openclaw:latest如果还是慢,可以分步拉取,先拉基础层再拉应用层,观察是哪一层卡住。实测下来,配置好重试次数后,650MB 左右的镜像在腾讯云广州区大概 3 到 5 分钟能拉完。
4. OpenClaw 的 config.toml 与 settings.json 骨架
镜像拉下来之后,OpenClaw 要能调用模型,得配两个文件:config.toml管运行参数和通道,settings.json管工具侧行为。下面给的是可复制骨架,你按自己环境改路径和 Key。
config.toml:
[server] host = "0.0.0.0" port = 18789 [model] provider = "openai-compatible" base_url = "https://taotoken.net/api" api_key = "${TAOTOKEN_API_KEY}" model = "claude-sonnet" timeout_seconds = 120 max_retries = 3 [agent] workspace = "/opt/openclaw/workspace" log_level = "info"settings.json:
{ "tools": { "shell": { "enabled": true, "timeout": 60 }, "file": { "enabled": true, "root": "/opt/openclaw/workspace" } }, "channel": { "type": "api", "endpoint": "https://taotoken.net/api", "key_env": "TAOTOKEN_API_KEY" } }Key 不要写死在文件里,用环境变量注入。启动容器时通过-e TAOTOKEN_API_KEY=你的Key传入,或者在 docker-compose 的 environment 段引用.env文件。这样镜像和配置分离,换 Key 不用重建镜像。
5. 启动容器并验证请求是否通
配置写好后,用 docker-compose 启动。先确认 compose 文件里映射了端口和配置目录:
services: openclaw: image: ghcr.io/openclaw/openclaw:latest ports: - "18789:18789" environment: - TAOTOKEN_API_KEY=${TAOTOKEN_API_KEY} volumes: - ./config.toml:/app/config.toml - ./settings.json:/app/settings.json - ./workspace:/opt/openclaw/workspace restart: unless-stopped启动并检查:
docker-compose up -d docker ps docker logs -f openclaw日志里看到server listening on 0.0.0.0:18789就说明服务起来了。接着验证模型通道连通性,用 curl 直接打 TaoToken 的 API 地址,确认 Key 有效:
curl -s -X POST https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer $TAOTOKEN_API_KEY" \ -H "Content-Type: application/json" \ -d '{"model":"claude-sonnet","messages":[{"role":"user","content":"ping"}]}'返回里有choices字段就说明通道通了。如果返回 401,检查 Key 是否复制完整;返回 404,检查 base_url 是否多了斜杠。这一步通了,再回 OpenClaw 面板里发一条测试消息,确认端到端能跑。
腾讯云安全组记得放行 18789 端口,入站规则来源填你的办公 IP 或 0.0.0.0/0,协议 TCP。放行后用浏览器访问http://你的公网IP:18789,首次进入设置管理员账号。
6. 本篇常见报错排查
报错一:manifest unknown说明你拉的是 Docker Hub 上的openclaw/openclaw,但 OpenClaw 只发 GHCR。改成ghcr.io/openclaw/openclaw:latest,并确认 daemon.json 里有覆盖 GHCR 的镜像源。
报错二:context deadline exceeded反复出现先看max-download-attempts是否调到 5,再看DOCKER_CLIENT_TIMEOUT是否设到 300。如果还不行,把ghcr.dockerproxy.com从镜像源里去掉,只留中科大源,避免加速层本身超时拖累整体。
报错三:容器起来但面板打不开九成是腾讯云安全组没放行 18789。去控制台实例的安全组里加入站规则,TCP:18789,来源按需。同时确认服务器内部firewalld或ufw没拦。
报错四:模型调用返回 401 或 403Key 没注入进容器。docker exec -it openclaw env | grep TAOTOKEN看一下环境变量在不在。不在的话检查 docker-compose 的 environment 段和.env文件路径。
报错五:拉取到一半磁盘满OpenClaw 镜像加工作区大概需要 2GB 以上。df -h看一下/var/lib/docker所在分区,不够就先docker system prune清理旧镜像。
7. 后续接入与 Key 管理
跑通之后,如果你要长期跑编码类或 Agent 任务,建议把 Key 的管理和额度规划单独拎出来。TaoToken 的 API Keys 页面可以建多个 Key,按用途分开,比如一个给 OpenClaw 日常对话,一个给编码任务,出问题好定位。接入文档里有不同语言和框架的调用示例,OpenClaw 的 config.toml 里 base_url 保持https://taotoken.net/api不变,换 Key 只改环境变量。
模型对话能力可以直接在模型对话页面先试,确认某个模型在你的场景下响应正常,再写进 config.toml。长期编码或 Agent 任务量大的话,Coding Plan 的额度比按次调用更划算,具体在控制台里看当前方案。
整个流程的核心就三件事:镜像源覆盖 GHCR、拉取重试次数调大、Key 通道用环境变量注入。这三步做完,腾讯云上 OpenClaw 的 Docker 拉取超时基本不会再出现。