Docker VM runtime
適用於 GCP、Hetzner 和類似 VPS 提供商等基於 VM 的 Docker 安裝的共享執行時步驟。
將所需的二進位檔案內建於映像檔中
Section titled “將所需的二進位檔案內建於映像檔中”在運行中的容器內安裝二進位檔案是一個陷阱。 任何在執行時安裝的內容都會在重啟後遺失。
Skills 所需的所有外部二進位檔案都必須在映像檔建置期間安裝。
以下範例僅顯示三種常見的二進位檔案:
gog(來自gogcli) 用於 Gmail 存取goplaces用於 Google Placeswacli用於 WhatsApp
這些只是範例,並非完整清單。 您可以使用相同的模式安裝任意數量的二進位檔案。
如果您稍後新增依賴其他二進位檔案的新 skills,您必須:
- 更新 Dockerfile
- 重新建置映像檔
- 重新啟動容器
Dockerfile 範例
FROM node:24-bookworm
RUN apt-get update && apt-get install -y socat && rm -rf /var/lib/apt/lists/*
# Example binary 1: Gmail CLI (gogcli — installs as `gog`)# Copy the current Linux asset URL from https://github.com/steipete/gogcli/releasesRUN curl -L https://github.com/steipete/gogcli/releases/latest/download/gogcli_linux_amd64.tar.gz \ | tar -xzO gog > /usr/local/bin/gog; \ chmod +x /usr/local/bin/gog
# Example binary 2: Google Places CLI# Copy the current Linux asset URL from https://github.com/steipete/goplaces/releasesRUN curl -L https://github.com/steipete/goplaces/releases/latest/download/goplaces_linux_amd64.tar.gz \ | tar -xzO goplaces > /usr/local/bin/goplaces; \ chmod +x /usr/local/bin/goplaces
# Example binary 3: WhatsApp CLI# Copy the current Linux asset URL from https://github.com/steipete/wacli/releasesRUN curl -L https://github.com/steipete/wacli/releases/latest/download/wacli-linux-amd64.tar.gz \ | tar -xzO wacli > /usr/local/bin/wacli; \ chmod +x /usr/local/bin/wacli
# Add more binaries below using the same pattern
WORKDIR /appCOPY package.json pnpm-lock.yaml pnpm-workspace.yaml .npmrc ./COPY ui/package.json ./ui/package.jsonCOPY scripts ./scripts
RUN corepack enableRUN pnpm install --frozen-lockfile
COPY . .RUN pnpm buildRUN pnpm ui:installRUN pnpm ui:build
ENV NODE_ENV=production
CMD ["node","dist/index.js"]docker compose builddocker compose up -d openclaw-gateway如果在 pnpm install --frozen-lockfile 期間因 Killed 或 exit code 137 而構建失敗,則表示 VM 記憶體不足。
重試前請使用更大的機器類型。
驗證二進位檔案:
docker compose exec openclaw-gateway which gogdocker compose exec openclaw-gateway which goplacesdocker compose exec openclaw-gateway which wacli預期輸出:
/usr/local/bin/gog/usr/local/bin/goplaces/usr/local/bin/wacli驗證 Gateway:
docker compose logs -f openclaw-gateway預期輸出:
[gateway] listening on ws://0.0.0.0:18789持久化位置與機制
Section titled “持久化位置與機制”OpenClaw 在 Docker 中運行,但 Docker 並非單一真實來源。 所有長期存在的狀態都必須在重啟、重建和重新啟動後保留。
| 組件 | 位置 | 持久化機制 | 備註 |
|---|---|---|---|
| Gateway 設定 | /home/node/.openclaw/ | 主機磁碟區掛載 | 包含 openclaw.json, .env |
| 模型授權設定檔 | /home/node/.openclaw/agents/ | 主機磁碟區掛載 | agents/<agentId>/agent/auth-profiles.json (OAuth, API 金鑰) |
| 認證設定檔金鑰 | /home/node/.config/openclaw/ | 主機磁碟區掛載 | OAuth 認證設定檔權杖本機加密金鑰 |
| Skill 設定 | /home/node/.openclaw/skills/ | 主機磁碟區掛載 | Skill 層級狀態 |
| Agent 工作區 | /home/node/.openclaw/workspace/ | 主機磁碟區掛載 | 程式碼與 Agent 成品 |
| WhatsApp 工作階段 | /home/node/.openclaw/ | 主機磁碟區掛載 | 保留 QR 登入 |
| Gmail 金鑰圈 | /home/node/.openclaw/ | 主機磁碟區 + 密碼 | 需要 GOG_KEYRING_PASSWORD |
| 外掛套件 | /home/node/.openclaw/npm, /home/node/.openclaw/git | 主機磁碟區掛載 | 可下載的外掛套件根目錄 |
| 外部二進位檔 | /usr/local/bin/ | Docker 映像檔 | 必須在建構時期烘焙進去 |
| Node 執行環境 | 容器檔案系統 | Docker 映像檔 | 每次建構映像檔時重新建構 |
| OS 套件 | 容器檔案系統 | Docker 映像檔 | 請勿在執行時期安裝 |
| Docker 容器 | 暫時性 | 可重新啟動 | 可安全銷毀 |
若要更新 VM 上的 OpenClaw:
git pulldocker compose builddocker compose up -d