Docker VM Runtime
Общие шаги runtime для VM-установок Docker — таких как GCP, Hetzner и подобные VPS-провайдеры.
Включение бинарников в образ
Установка бинарников внутри работающего контейнера — ловушка. Всё, что установлено в runtime, будет потеряно при перезапуске.
Все внешние бинарники, необходимые скиллам, должны быть установлены при сборке образа.
Примеры ниже показывают три часто используемых бинарника:
gogдля доступа к Gmailgoplacesдля Google Placeswacliдля WhatsApp
Это примеры, а не исчерпывающий список. Вы можете установить сколько угодно бинарников по той же схеме.
Если позже вы добавите скиллы, зависящие от дополнительных бинарников, нужно:
- Обновить 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"]
Сборка и запуск
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