Docker VM Runtime

Общие шаги runtime для VM-установок Docker — таких как GCP, Hetzner и подобные VPS-провайдеры.

Включение бинарников в образ

Установка бинарников внутри работающего контейнера — ловушка. Всё, что установлено в runtime, будет потеряно при перезапуске.

Все внешние бинарники, необходимые скиллам, должны быть установлены при сборке образа.

Примеры ниже показывают три часто используемых бинарника:

  • gog для доступа к Gmail
  • goplaces для Google Places
  • wacli для WhatsApp

Это примеры, а не исчерпывающий список. Вы можете установить сколько угодно бинарников по той же схеме.

Если позже вы добавите скиллы, зависящие от дополнительных бинарников, нужно:

  1. Обновить Dockerfile
  2. Пересобрать образ
  3. Перезапустить контейнеры

Пример 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"]

Сборка и запуск

docker compose build
docker compose up -d openclaw-gateway

Если сборка падает с Killed или exit code 137 во время pnpm install --frozen-lockfile, на VM не хватает памяти. Перейдите на более мощный тип машины перед повторной попыткой.

Проверка бинарников:

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

Проверка шлюза:

docker compose logs -f openclaw-gateway

Ожидаемый вывод:

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

Что где хранится

OpenClaw работает в Docker, но Docker — не источник истины. Всё долгоживущее состояние должно переживать перезапуски, пересборки и перезагрузки.

КомпонентРасположениеМеханизм сохраненияПримечания
Конфигурация шлюза/home/node/.openclaw/Volume-монтированиеВключает openclaw.json, токены
Профили авторизации/home/node/.openclaw/Volume-монтированиеOAuth-токены, API-ключи
Конфигурация скиллов/home/node/.openclaw/skills/Volume-монтированиеСостояние скиллов
Workspace агента/home/node/.openclaw/workspace/Volume-монтированиеКод и артефакты агента
Сессия WhatsApp/home/node/.openclaw/Volume-монтированиеСохраняет QR-авторизацию
Связка ключей Gmail/home/node/.openclaw/Volume + парольТребует GOG_KEYRING_PASSWORD
Внешние бинарники/usr/local/bin/Docker-образДолжны быть встроены при сборке
Node runtimeФайловая система контейнераDocker-образПересоздаётся при каждой сборке
Пакеты ОСФайловая система контейнераDocker-образНе устанавливайте в runtime
Docker-контейнерЭфемерныйПерезапускаемыйБезопасно удалять

Обновление

Для обновления OpenClaw на VM:

git pull
docker compose build
docker compose up -d