云图AI云图AI
教程 · install

Docker 部署 OpenClaw 后配置 Anthropic / Claude 模型教程


这篇教程记录一下在 VPS 上用 Docker 部署 OpenClaw 后,如何配置 Anthropic Claude 模型。重点解决几个常见问题:

Claude CLI is not authenticated on this host
Unknown command: openclaw sh
claude: not found

OpenClaw 支持两种 Anthropic 接入方式:一种是 Anthropic API Key,另一种是复用本机已经登录的 Claude CLI / Claude Code。官方文档也说明,API Key 更适合长期运行和生产环境;Claude CLI 则适合复用已有 Claude Code 登录状态。


一、两种接入方式怎么选

方式一:Anthropic API Key

适合:

  • 服务器长期运行

  • 需要稳定计费

  • 不想折腾 Claude CLI 登录状态

  • 多人或生产环境使用

优点是稳定,缺点是走 API 计费。

方式二:Anthropic Claude CLI

适合:

  • 已经有 Claude Pro / Max / Claude Code 登录

  • 想让 OpenClaw 复用 Claude CLI

  • 个人 VPS 自用

缺点是 Docker 环境里必须正确安装并登录 Claude CLI,而且要保证 Claude CLI 文件和登录凭证不会因为容器重建而丢失。OpenClaw Docker 文档明确提醒:Claude CLI reuse 依赖 Claude Code 的安装版本、账号登录、计费和更新行为;长期生产环境更建议使用 API Key。


方案 A:推荐,使用 Anthropic API Key

这是最稳的方式。

1. 准备 Anthropic API Key

去 Anthropic Console 创建 API Key。

然后在 VPS 上进入 OpenClaw 目录:

cd ~/openclaw

把 API Key 写入 .env

echo 'ANTHROPIC_API_KEY=你的_Anthropic_API_Key' >> .env

2. 运行 OpenClaw onboarding

docker compose run --rm -e ANTHROPIC_API_KEY="你的_Anthropic_API_Key" openclaw-cli onboard

交互选择:

Model/auth provider: Anthropic
Anthropic auth method: Anthropic API key

OpenClaw 的 onboarding 支持 Anthropic API Key,并且可以通过 ANTHROPIC_API_KEY 环境变量读取 key。

3. 重启 gateway

docker compose restart openclaw-gateway

4. 检查模型是否可用

docker compose run --rm openclaw-cli models list --provider anthropic

看到 anthropic/... 模型,就说明配置成功。


方案 B:使用 Claude CLI / Claude Code 登录

这个方案适合想复用 Claude 订阅账号的人。

你之前遇到的问题主要是:

Claude CLI is not authenticated on this host

原因是你选了:

Anthropic → Anthropic Claude CLI

但是 Claude CLI 没有在 OpenClaw Docker 容器环境 里登录。

注意:在 VPS 宿主机登录 Claude 不一定有用。OpenClaw Docker 运行在容器里,它需要容器里也能找到 claude 命令,并且能读取 Claude 登录凭证。


1. 先确认 OpenClaw 容器的 home 目录

执行:

cd ~/openclaw

docker compose run --rm --entrypoint sh openclaw-cli -lc '
echo "HOME=$HOME"
echo "OPENCLAW_HOME=$OPENCLAW_HOME"
ls -la "$OPENCLAW_HOME"
'

你可能会看到类似:

HOME=/home/node
OPENCLAW_HOME=/home/node

这说明容器里的用户目录是 /home/node


2. 为什么直接安装后会丢?

你可能执行过:

docker compose run --rm --entrypoint sh openclaw-cli -lc '
curl -fsSL https://claude.ai/install.sh | bash
export PATH="$HOME/.local/bin:$PATH"
claude --version
'

当时安装成功了:

2.1.204 (Claude Code)

但下一次执行:

docker compose run --rm --entrypoint sh openclaw-cli -lc '
export PATH="$HOME/.local/bin:$PATH"
claude auth login
'

却报:

claude: not found

原因是:docker compose run --rm 启动的是一次性容器,容器退出后,安装到 /home/node/.local/bin 的文件没有持久化。

OpenClaw Docker 官方文档也提到,Claude CLI 路径需要持久化,例如 /home/node/.local/bin/home/node/.local/share/claude/home/node/.claude/home/node/.claude.json 等;只持久化 /home/node/.openclaw 并不够。


方案 B-1:官方推荐,重新用持久化 home 部署

新部署时建议这样启动:

cd ~
git clone https://github.com/openclaw/openclaw.git
cd openclaw

export OPENCLAW_IMAGE="ghcr.io/openclaw/openclaw:latest"
export OPENCLAW_HOME_VOLUME="openclaw_home"

./scripts/docker/setup.sh

这样 /home/node 会被持久化,Claude CLI 安装到 /home/node/.local/bin 后不会丢。

然后安装 Claude Code:

docker compose run --rm --entrypoint sh openclaw-cli -lc '
curl -fsSL https://claude.ai/install.sh | bash
export PATH="$HOME/.local/bin:$PATH"
claude --version
'

Claude Code 官方 Linux/macOS/WSL 安装命令就是:curl -fsSL https://claude.ai/install.sh | bash

登录 Claude:

docker compose run --rm --entrypoint sh openclaw-cli -lc '
export PATH="$HOME/.local/bin:$PATH"
claude auth login
'

登录后检查:

docker compose run --rm --entrypoint sh openclaw-cli -lc '
export PATH="$HOME/.local/bin:$PATH"
claude auth status --text
'

再让 OpenClaw 使用 Claude CLI:

docker compose run --rm openclaw-cli models auth login \
  --provider anthropic \
  --method cli \
  --set-default

OpenClaw 的 CLI backend 文档说明,Claude CLI 必须在同一 host / 运行环境里登录,然后再执行 openclaw models auth login --provider anthropic --method cli --set-default

最后重启:

docker compose restart openclaw-gateway

检查:

docker compose run --rm openclaw-cli models list --provider anthropic

方案 B-2:已经部署好了,不想重装,手动持久化 Claude CLI

如果你已经部署好了 OpenClaw,而且现在只有 /home/node/.openclaw 是稳定持久化目录,可以把 Claude CLI 和 Claude 配置目录放到 /home/node/.openclaw 下面。

Claude Code 支持 CLAUDE_CONFIG_DIR 环境变量,用来覆盖默认配置目录;所有设置、凭证、会话历史和插件都会存储在这个路径下。

1. 安装 Claude 到持久化目录

cd ~/openclaw

docker compose run --rm --entrypoint sh openclaw-cli -lc '
set -e

mkdir -p /home/node/.openclaw/claude-bin
mkdir -p /home/node/.openclaw/claude-config

curl -fsSL https://claude.ai/install.sh | bash

cp /home/node/.local/bin/claude /home/node/.openclaw/claude-bin/claude
chmod +x /home/node/.openclaw/claude-bin/claude

/home/node/.openclaw/claude-bin/claude --version
'

看到版本号,例如:

2.1.204 (Claude Code)

说明安装成功。


2. 使用持久化配置目录登录 Claude

cd ~/openclaw

docker compose run --rm --entrypoint sh openclaw-cli -lc '
export CLAUDE_CONFIG_DIR=/home/node/.openclaw/claude-config
/home/node/.openclaw/claude-bin/claude auth login
'

终端会给你一个登录链接。复制到浏览器打开,完成 Claude 登录。

登录后检查:

docker compose run --rm --entrypoint sh openclaw-cli -lc '
export CLAUDE_CONFIG_DIR=/home/node/.openclaw/claude-config
/home/node/.openclaw/claude-bin/claude auth status --text
'

如果显示已登录,就说明 Claude 凭证已经写入:

/home/node/.openclaw/claude-config

3. 让 OpenClaw Gateway 每次都能找到 Claude

创建 docker-compose.override.yml

cd ~/openclaw

cat > docker-compose.override.yml <<'EOF'
services:
  openclaw-gateway:
    environment:
      CLAUDE_CONFIG_DIR: /home/node/.openclaw/claude-config
      PATH: /home/node/.openclaw/claude-bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

  openclaw-cli:
    environment:
      CLAUDE_CONFIG_DIR: /home/node/.openclaw/claude-config
      PATH: /home/node/.openclaw/claude-bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
EOF

让 override 生效:

docker compose up -d
docker compose restart openclaw-gateway

4. 验证 CLI 容器能找到 Claude

docker compose run --rm --entrypoint sh openclaw-cli -lc '
which claude
claude --version
claude auth status --text
'

正常应该输出:

/home/node/.openclaw/claude-bin/claude
2.x.x (Claude Code)
Logged in

5. 验证 Gateway 容器也能找到 Claude

docker compose exec openclaw-gateway sh -lc '
which claude
claude --version
claude auth status --text
'

如果 gateway 里也能正常显示 Claude 版本和登录状态,就说明最关键的一步已经完成。


6. 在 OpenClaw 里启用 Anthropic Claude CLI

执行:

docker compose run --rm openclaw-cli onboard

交互选择:

Model/auth provider: Anthropic
Anthropic auth method: Anthropic Claude CLI

这次就不应该再出现:

Claude CLI is not authenticated on this host.

配置完成后重启:

docker compose restart openclaw-gateway

检查模型:

docker compose run --rm openclaw-cli models list --provider anthropic

常见报错处理

1. Unknown command: openclaw sh

错误:

Unknown command: openclaw sh

原因是 openclaw-cli 这个 service 默认 entrypoint 就是 openclaw,所以你执行:

docker compose run --rm openclaw-cli sh -lc '...'

实际相当于执行:

openclaw sh -lc '...'

正确写法是覆盖 entrypoint:

docker compose run --rm --entrypoint sh openclaw-cli -lc '
echo hello
'

2. claude: not found

错误:

sh: 3: claude: not found

常见原因:

  1. Claude 安装在一次性容器里,退出后丢了;

  2. PATH 没有包含 Claude 所在目录;

  3. gateway 容器没有读取到 override 环境变量。

排查:

docker compose run --rm --entrypoint sh openclaw-cli -lc '
echo PATH=$PATH
which claude || true
ls -la /home/node/.openclaw/claude-bin || true
'

3. Claude CLI is not authenticated on this host

错误:

Claude CLI is not authenticated on this host.
Run claude auth login first, then re-run this setup.

原因是 OpenClaw 所在容器里没有 Claude 登录状态。

解决:

docker compose run --rm --entrypoint sh openclaw-cli -lc '
export CLAUDE_CONFIG_DIR=/home/node/.openclaw/claude-config
claude auth login
'

然后检查:

docker compose run --rm --entrypoint sh openclaw-cli -lc '
export CLAUDE_CONFIG_DIR=/home/node/.openclaw/claude-config
claude auth status --text
'

最终推荐

个人 VPS 自用,可以用:

Anthropic Claude CLI

但要保证:

Claude CLI 安装路径持久化
Claude 登录凭证持久化
gateway 容器能找到 claude 命令

长期稳定运行、生产环境、多人使用,更推荐:

Anthropic API Key

官方文档也明确提示,长期 gateway host、共享自动化和可预测生产成本场景,优先使用 Anthropic API Key。


一键排查命令

最后贴一个排查命令:

cd ~/openclaw

docker compose exec openclaw-gateway sh -lc '
echo PATH=$PATH
echo CLAUDE_CONFIG_DIR=$CLAUDE_CONFIG_DIR
which claude || true
claude --version || true
claude auth status --text || true
'

只要这里能看到:

which claude 正常
claude --version 正常
claude auth status 正常

OpenClaw 里选择 Anthropic Claude CLI 基本就可以成功。