Docker --- опциональный способ запуска OpenClaw. Используйте его, если хотите изолированное окружение на сервере или VPS. Для обычной работы на своём компьютере проще использовать нативную установку на Mac или Windows.
Источник: вся информация в этой статье основана на официальной документации Docker и репозитории OpenClaw на GitHub.
Когда нужен Docker
| Сценарий | Docker нужен? |
|---|---|
| Запуск на своём Mac/Windows | Нет --- используйте нативную установку |
| Запуск на VPS/сервере в изоляции | Да |
| Песочница для агентов (sandbox) | Нужен Docker, но gateway может работать нативно |
| Одноразовое тестовое окружение | Да |
Требования
- Docker Desktop (или Docker Engine) + Docker Compose v2
- Достаточно места на диске для образов и логов
Проверка
docker --version
docker compose version
Быстрый старт (рекомендуемый способ)
Официальный способ --- клонировать репозиторий и запустить скрипт настройки:
git clone https://github.com/openclaw/openclaw.git
cd openclaw
./docker-setup.sh
Скрипт docker-setup.sh автоматически:
- Собирает Docker-образ gateway
- Запускает мастер настройки (onboarding)
- Показывает подсказки по подключению провайдера LLM
- Запускает gateway через Docker Compose
- Генерирует токен gateway и записывает его в
.env
После завершения:
- Откройте http://127.0.0.1:18789/ в браузере
- Вставьте токен в Control UI (Settings → token)
- Если нужен токен повторно:
docker compose run --rm openclaw-cli dashboard --no-open
Конфигурация сохраняется на хосте в ~/.openclaw/ и ~/.openclaw/workspace.
Ручной запуск (Docker Compose)
Если вы хотите контролировать каждый шаг:
# Из корня склонированного репозитория
docker build -t openclaw:local -f Dockerfile .
docker compose run --rm openclaw-cli onboard
docker compose up -d openclaw-gateway
Структура официального docker-compose.yml
В репозитории OpenClaw файл docker-compose.yml содержит два сервиса:
services:
openclaw-gateway:
image: ${OPENCLAW_IMAGE:-openclaw:local}
environment:
HOME: /home/node
OPENCLAW_GATEWAY_TOKEN: ${OPENCLAW_GATEWAY_TOKEN}
volumes:
- ${OPENCLAW_CONFIG_DIR}:/home/node/.openclaw
- ${OPENCLAW_WORKSPACE_DIR}:/home/node/.openclaw/workspace
ports:
- "${OPENCLAW_GATEWAY_PORT:-18789}:18789"
- "${OPENCLAW_BRIDGE_PORT:-18790}:18790"
init: true
restart: unless-stopped
command:
[
"node", "dist/index.js", "gateway",
"--bind", "${OPENCLAW_GATEWAY_BIND:-lan}",
"--port", "18789",
]
openclaw-cli:
image: ${OPENCLAW_IMAGE:-openclaw:local}
environment:
HOME: /home/node
OPENCLAW_GATEWAY_TOKEN: ${OPENCLAW_GATEWAY_TOKEN}
volumes:
- ${OPENCLAW_CONFIG_DIR}:/home/node/.openclaw
- ${OPENCLAW_WORKSPACE_DIR}:/home/node/.openclaw/workspace
stdin_open: true
tty: true
init: true
entrypoint: ["node", "dist/index.js"]
Важно: образ собирается локально (
openclaw:local), а не скачивается с Docker Hub. Контейнер работает от пользователяnode(uid 1000), а не отroot.
Переменные окружения (OPENCLAW_CONFIG_DIR, OPENCLAW_WORKSPACE_DIR, OPENCLAW_GATEWAY_TOKEN) автоматически задаются скриптом docker-setup.sh в файле .env.
Подключение каналов (Telegram, Discord и др.)
После запуска gateway настройте каналы через CLI-контейнер:
Telegram (по токену бота):
docker compose run --rm openclaw-cli channels add --channel telegram --token "<ваш-токен-бота>"
WhatsApp (по QR-коду):
docker compose run --rm openclaw-cli channels login
Discord (по токену бота):
docker compose run --rm openclaw-cli channels add --channel discord --token "<ваш-токен>"
Управление контейнерами
# Статус
docker compose ps
# Логи (в реальном времени)
docker compose logs -f
# Перезапуск
docker compose restart openclaw-gateway
# Остановка
docker compose down
Опциональные настройки
Дополнительные монтирования
Если нужно пробросить директории с хоста внутрь контейнера:
export OPENCLAW_EXTRA_MOUNTS="$HOME/.codex:/home/node/.codex:ro,$HOME/github:/home/node/github:rw"
./docker-setup.sh
Сохранение /home/node между пересозданиями
export OPENCLAW_HOME_VOLUME="openclaw_home"
./docker-setup.sh
Установка системных пакетов в образ
export OPENCLAW_DOCKER_APT_PACKAGES="ffmpeg build-essential"
./docker-setup.sh
Песочница агентов (Agent Sandbox)
Sandbox --- это отдельная от gateway Docker-функция. Gateway может работать нативно на хосте, а инструменты агента выполняться в изолированном контейнере.
Для включения добавьте в ~/.openclaw/openclaw.json:
{
agents: {
defaults: {
sandbox: {
mode: "non-main", // off | non-main | all
scope: "agent", // session | agent | shared
},
},
},
}
Соберите образ песочницы:
# Базовая песочница
scripts/sandbox-setup.sh
# С инструментами разработки (Node, Go, Rust)
scripts/sandbox-common-setup.sh
# С браузером (Chromium + CDP)
scripts/sandbox-browser-setup.sh
По умолчанию песочница:
- Образ:
openclaw-sandbox:bookworm-slim - Сеть:
none(без доступа в интернет) - Пользователь:
1000:1000(не root) - Автоочистка: idle > 24ч или возраст > 7 дней
Деплой на VPS
Для VPS официальная документация рекомендует отдельный гайд: Hetzner (Docker VPS).
Общий порядок:
# 1. Установить Docker на сервере
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
newgrp docker
# 2. Склонировать репозиторий
git clone https://github.com/openclaw/openclaw.git
cd openclaw
# 3. Запустить настройку
./docker-setup.sh
Gateway по умолчанию привязывается к lan (доступен по локальной сети), порт 18789.
Права доступа
Контейнер работает от пользователя node (uid 1000). Если возникают ошибки Permission denied:
sudo chown -R 1000:1000 ~/.openclaw ~/.openclaw/workspace
Проверка здоровья gateway
docker compose exec openclaw-gateway node dist/index.js health --token "$OPENCLAW_GATEWAY_TOKEN"
Типичные проблемы
«Permission denied» при монтировании volumes
- Убедитесь, что директории на хосте принадлежат uid 1000:
ls -ln ~/.openclaw/ - Исправьте:
sudo chown -R 1000:1000 ~/.openclaw
«Unauthorized» или «disconnected (1008): pairing required»
- Получите свежий токен:
docker compose run --rm openclaw-cli dashboard --no-open - Подтвердите устройство:
docker compose run --rm openclaw-cli devices approve <requestId>
Контейнер перезапускается в цикле
- Проверьте логи:
docker compose logs --tail 50 - Обычно проблема в конфигурации --- ошибка синтаксиса в openclaw.json
Агент не отвечает в мессенджере
- Проверьте, что канал добавлен:
docker compose run --rm openclaw-cli channels list - Проверьте сетевой доступ из контейнера
Что дальше
- Установка на Mac --- нативная установка без Docker
- Установка на Windows --- нативная установка на Windows
- Установка на Linux --- нативная установка на Ubuntu, Debian и другие
- Безопасность на VPS --- полный гайд по защите сервера
- Подключение Telegram --- настройка бота