Skip to content

Docker VM 运行时

适用于基于 VM 的 Docker 安装(如 GCP、Hetzner 等 VPS)的通用运行时步骤。

将所需二进制工具内置到镜像

在运行中的容器内安装二进制工具是个陷阱——任何在运行时安装的东西在容器重启后都会丢失。

所有 skills 依赖的外部二进制工具必须在镜像构建时安装。

以下示例仅展示三个常见工具:

  • gog:Gmail 访问
  • goplaces:Google Places
  • wacli:WhatsApp

这只是示例,不是完整列表。你可以按同样的模式安装任意数量的二进制工具。

如果你后来添加了依赖其他二进制工具的 skills,必须:

  1. 更新 Dockerfile
  2. 重新构建镜像
  3. 重启容器

Dockerfile 示例

dockerfile
FROM node:24-bookworm

RUN apt-get update && apt-get install -y socat && rm -rf /var/lib/apt/lists/*

# 示例二进制 1:Gmail CLI
RUN curl -L https://github.com/steipete/gog/releases/latest/download/gog_Linux_x86_64.tar.gz \
  | tar -xz -C /usr/local/bin && chmod +x /usr/local/bin/gog

# 示例二进制 2:Google Places CLI
RUN curl -L https://github.com/steipete/goplaces/releases/latest/download/goplaces_Linux_x86_64.tar.gz \
  | tar -xz -C /usr/local/bin && chmod +x /usr/local/bin/goplaces

# 示例二进制 3:WhatsApp CLI
RUN curl -L https://github.com/steipete/wacli/releases/latest/download/wacli_Linux_x86_64.tar.gz \
  | tar -xz -C /usr/local/bin && chmod +x /usr/local/bin/wacli

# 按同样的模式在下方添加更多二进制工具

WORKDIR /app
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml .npmrc ./
COPY ui/package.json ./ui/package.json
COPY scripts ./scripts

RUN corepack enable
RUN pnpm install --frozen-lockfile

COPY . .
RUN pnpm build
RUN pnpm ui:install
RUN pnpm ui:build

ENV NODE_ENV=production

CMD ["node","dist/index.js"]

注意: 上面的下载 URL 适用于 x86_64(amd64)。对于基于 ARM 的 VM(如 Hetzner ARM、GCP Tau T2A),请将下载 URL 替换为各工具发布页面上对应的 ARM64 版本。

构建和启动

bash
docker compose build
docker compose up -d openclaw-gateway

如果构建时在 pnpm install --frozen-lockfile 阶段因 Killedexit code 137 失败,说明 VM 内存不足,换用更大的机器规格后重试。

验证二进制工具:

bash
docker compose exec openclaw-gateway which gog
docker compose exec openclaw-gateway which goplaces
docker compose exec openclaw-gateway which wacli

预期输出:

/usr/local/bin/gog
/usr/local/bin/goplaces
/usr/local/bin/wacli

验证 Gateway:

bash
docker compose logs -f openclaw-gateway

预期输出:

[gateway] listening on ws://0.0.0.0:18789

数据存储位置

OpenClaw 运行在 Docker 中,但 Docker 不是状态的持久化来源。所有长期状态必须能在重启、重建和重启动后保留——这就是你的龙虾的"记忆"。

组件位置持久化机制说明
Gateway 配置/home/node/.openclaw/宿主机 volume 挂载包含 openclaw.json、令牌
模型认证配置/home/node/.openclaw/宿主机 volume 挂载OAuth 令牌、API keys
Skill 配置/home/node/.openclaw/skills/宿主机 volume 挂载Skill 级别的状态
Agent 工作区/home/node/.openclaw/workspace/宿主机 volume 挂载代码和 Agent 产物
WhatsApp 会话/home/node/.openclaw/宿主机 volume 挂载保留二维码登录状态
Gmail keyring/home/node/.openclaw/宿主机 volume + 密码需要 GOG_KEYRING_PASSWORD
外部二进制工具/usr/local/bin/Docker 镜像必须在构建时内置
Node 运行时容器文件系统Docker 镜像每次镜像构建时重建
OS 包容器文件系统Docker 镜像不在运行时安装
Docker 容器临时可重启可以安全销毁

更新

在 VM 上更新 OpenClaw:

bash
git pull
docker compose build
docker compose up -d