魅力程序猿

  • 首页
  • Java
  • Android
  • APP
    • 扑克计分器
    • Video Wallpaper
  • 联系我
  • 关于我
  • 资助
道子
向阳而生
  1. 首页
  2. AI技术
  3. 正文

《OpenClaw (Docker手工部署版) 终极避坑与实战指南》

2026年3月23日 8点热度 0人点赞 0条评论

背景说明: OpenClaw(又名 ClawdBot)是一个极其强大的私人 AI 助手,具有持久记忆并能无缝接入 Telegram 等聊天软件。 官方推荐使用“源码编译 + CLI交互向导”进行部署,但这会污染宿主机环境。因此,我们选择了更硬核、更干净的 Docker 容器化 + 纯手工配置 路线。但由于跳过了向导,我们直面了其底层极其苛刻的校验机制和潜藏的代码 Bug。

本文记录了在 VPS(如 RackNerd)上使用 Docker 部署 OpenClaw 并接入 DeepSeek 模型时,遇到的所有“致命暗坑”及终极解法。

💡 TL;DR:先上终极完美配置代码

如果你不想看排错过程,只想一次性点火成功,请直接清空你现有的配置,使用以下这套经过无数次试错得出的“终极防御版配置”。

1. docker-compose.yml (纯净版)

核心原则:千万不要在这里写任何关于 OPENAI_BASE_URL 或 MODEL 的环境变量!全部交给 JSON 处理,避免双重注入冲突。

services:
  openclaw-core:
    image: ghcr.io/openclaw/openclaw:latest
    container_name: openclaw_kernel
    restart: unless-stopped
    volumes:
      # 必须挂载当前目录到容器内,不要随意新建 data 文件夹
      - ./:/home/node/.openclaw
    environment:
      # --- 只保留 Telegram 机器人的 Token 和你的 ID ---
      - TELEGRAM_BOT_TOKEN=8688xxxx:xxxx你的真实Tokenxxxx
      - ALLOWED_USER_IDS=8408082812
      - LOG_LEVEL=info
    networks:
      - openclaw-net

networks:
  openclaw-net:
    driver: bridge

2. openclaw.json (主脑自立门户版)

核心原则:绕过系统自带的 openai 驱动 Bug,强行自创一个名为 deepseek 的提供商,并指定基础通信协议。

{
  "models": {
    "providers": {
      "deepseek": {
        "baseUrl": "https://api.deepseek.com",
        "apiKey": "sk-这里填入你真实有效的DeepSeek密钥",
        "api": "openai-completions",
        "models": [
          {
            "id": "deepseek-chat",
            "name": "deepseek-chat"
          }
        ]
      }
    }
  },
  "agents": {
    "defaults": {
      "model": "deepseek/deepseek-chat"
    }
  },
  "gateway": {
    "auth": {
      "mode": "token"
    }
  }
}

在执行启动前,必须清理掉旧的记忆文件,否则它会固执地读取旧配置!

# 彻底停机并清除旧特工记忆
docker compose down
rm -rf agents/

# 重新点火并查看日志
docker compose up -d
docker compose logs -f openclaw-core

只要日志出现 [gateway] listening on ws://...,去 Telegram 发一句“你好”,你的私人管家就彻底活了!

🕵️‍♂️ 万字排坑记录:我们到底踩了哪些雷?

坑一:幽灵般的“顽固记忆” (Config overwrite)

  • 现象:修改了 docker-compose.yml 里的环境变量,甚至改了 openclaw.json,但每次重启,日志里读取的模型名字依然是旧的(比如退回默认的 Claude)。

现象:修改了 docker-compose.yml 里的环境变量,甚至改了 openclaw.json,但每次重启,日志里读取的模型名字依然是旧的(比如退回默认的 Claude)。

  • 原理:OpenClaw 内部有一个强悍的状态保护机制。只要 agents/ 文件夹或旧的 openclaw.json 存在,它启动时就会优先读取“历史记忆”,直接覆盖并无视你新写的配置。

原理:OpenClaw 内部有一个强悍的状态保护机制。只要 agents/ 文件夹或旧的 openclaw.json 存在,它启动时就会优先读取“历史记忆”,直接覆盖并无视你新写的配置。

  • 解法:每次做重大配置修改时,必须执行 rm -rf agents/ 和 rm -f openclaw.json,逼迫它重新认主。

解法:每次做重大配置修改时,必须执行 rm -rf agents/ 和 rm -f openclaw.json,逼迫它重新认主。

坑二:极其变态的 JSON 质检员 (Config invalid)

  • 现象:在 openclaw.json 里添加自定义模型白名单时,疯狂报错:Invalid input: expected string, received undefined 或 expected object, received string。

现象:在 openclaw.json 里添加自定义模型白名单时,疯狂报错:Invalid input: expected string, received undefined 或 expected object, received string。

  • 原理:如果你跳过向导手工写 JSON,它的底层校验器一板一眼到了发指的地步。模型列表不能只是一个字符串 ["deepseek-chat"],必须是一个完整的对象,并且强制要求同时包含 id、name 以及 baseUrl,缺一不可。

原理:如果你跳过向导手工写 JSON,它的底层校验器一板一眼到了发指的地步。模型列表不能只是一个字符串 ["deepseek-chat"],必须是一个完整的对象,并且强制要求同时包含


🔗 原文链接: 点击阅读原文

标签: AI 人工智能 技术博客
最后更新:2026年3月23日

daozi

这个人很懒,什么都没留下

点赞
< 上一篇

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复
搜索
联系方式

QQ群:179730949
QQ群:114559024
欢迎您加入Android大家庭
本人QQ:136049925

赐我一丝安慰
给我一点鼓励

COPYRIGHT © 2023 魅力程序猿. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

豫ICP备15000477号