Docker (необязательно)
Docker — необязателен. Используйте его только если вам нужен контейнеризованный Gateway (шлюз) или вы хотите проверить поток работы с Docker.Подходит ли мне Docker?
- Да: вам нужна изолированная, одноразовая среда Gateway (шлюз) или вы хотите запускать OpenClaw на хосте без локальных установок.
- Нет: вы работаете на своей машине и просто хотите самый быстрый цикл разработки. В этом случае используйте обычный процесс установки.
- Примечание по sandboxing: sandboxing агентов тоже использует Docker, но не требует запуска всего Gateway (шлюз) в Docker. См. Sandboxing.
- Контейнеризованный Gateway (шлюз) (полный OpenClaw в Docker)
- Sandbox агента на сеанс (Gateway (шлюз) на хосте + инструменты агента, изолированные Docker)
Требования
- Docker Desktop (или Docker Engine) + Docker Compose v2
- Достаточно дискового пространства для образов и логов
Контейнеризованный Gateway (шлюз) (Docker Compose)
Быстрый старт (рекомендуется)
Из корня репозитория:- собирает образ Gateway (шлюз)
- запускает мастер онбординга
- выводит подсказки по настройке провайдера
- запускает Gateway (шлюз) через Docker Compose
- генерирует токен Gateway (шлюз) и записывает его в
.env
OPENCLAW_DOCKER_APT_PACKAGES— установить дополнительные пакеты apt во время сборкиOPENCLAW_EXTRA_MOUNTS— добавить дополнительные bind-монты хостаOPENCLAW_HOME_VOLUME— сохранять/home/nodeв именованном томе
- Откройте
http://127.0.0.1:18789/в браузере. - Вставьте токен в Control UI (Settings → token).
- Нужно снова получить URL? Запустите
docker compose run --rm openclaw-cli dashboard --no-open.
~/.openclaw/~/.openclaw/workspace
Вспомогательные команды shell (необязательно)
Для более удобного повседневного управления Docker установитеClawDock:
clawdock-start, clawdock-stop, clawdock-dashboard и т.д. Выполните clawdock-help, чтобы увидеть все команды.
Подробности см. в ClawDock Helper README.
Ручной процесс (compose)
docker compose ... из корня репозитория. Если вы включили
OPENCLAW_EXTRA_MOUNTS или OPENCLAW_HOME_VOLUME, скрипт настройки записывает
docker-compose.extra.yml; подключите его при запуске Compose в другом месте:
Токен Control UI + сопряжение (Docker)
Если вы видите «unauthorized» или «disconnected (1008): pairing required», получите свежую ссылку на панель и одобрите устройство браузера:Дополнительные монтирования (необязательно)
Если вы хотите смонтировать дополнительные каталоги хоста в контейнеры, установитеOPENCLAW_EXTRA_MOUNTS перед запуском docker-setup.sh. Принимается
список Docker bind-монтов, разделённых запятыми, который применяется к
openclaw-gateway и openclaw-cli путём генерации docker-compose.extra.yml.
Пример:
- Пути должны быть расшарены с Docker Desktop на macOS/Windows.
- Если вы редактируете
OPENCLAW_EXTRA_MOUNTS, повторно запуститеdocker-setup.sh, чтобы пересоздать дополнительный compose-файл. docker-compose.extra.ymlгенерируется автоматически. Не редактируйте его вручную.
Сохранение всего home контейнера (необязательно)
Если вы хотите, чтобы/home/node сохранялся при пересоздании контейнера, задайте
именованный том через OPENCLAW_HOME_VOLUME. Это создаёт Docker-том и монтирует его в
/home/node, сохраняя стандартные bind-монты для конфига/рабочего пространства. Используйте здесь именованный том (а не bind-путь); для bind-монтов используйте
OPENCLAW_EXTRA_MOUNTS.
Пример:
- Если вы измените
OPENCLAW_HOME_VOLUME, повторно запуститеdocker-setup.sh, чтобы пересоздать дополнительный compose-файл. - Именованный том сохраняется до удаления командой
docker volume rm <name>.
Установка дополнительных пакетов apt (необязательно)
Если вам нужны системные пакеты внутри образа (например, инструменты сборки или медиабиблиотеки), установитеOPENCLAW_DOCKER_APT_PACKAGES перед запуском docker-setup.sh.
Пакеты устанавливаются во время сборки образа, поэтому сохраняются даже при удалении
контейнера.
Пример:
- Принимается список имён пакетов apt, разделённых пробелами.
- Если вы измените
OPENCLAW_DOCKER_APT_PACKAGES, повторно запуститеdocker-setup.sh, чтобы пересобрать образ.
Для опытных пользователей / полнофункциональный контейнер (opt-in)
Образ Docker по умолчанию ориентирован на безопасность и запускается от непривилегированного пользователяnode. Это уменьшает поверхность атаки,
но означает:
- отсутствие установки системных пакетов во время выполнения
- отсутствие Homebrew по умолчанию
- отсутствие встроенных браузеров Chromium/Playwright
- Сохранять
/home/node, чтобы загрузки браузеров и кэши инструментов сохранялись:
- Запекать системные зависимости в образ (воспроизводимо и постоянно):
- Устанавливать браузеры Playwright без
npx(избегает конфликтов переопределений npm):
OPENCLAW_DOCKER_APT_PACKAGES вместо использования --with-deps во время выполнения.
- Сохранять загрузки браузеров Playwright:
- Установите
PLAYWRIGHT_BROWSERS_PATH=/home/node/.cache/ms-playwrightвdocker-compose.yml. - Убедитесь, что
/home/nodeсохраняется черезOPENCLAW_HOME_VOLUME, или смонтируйте/home/node/.cache/ms-playwrightчерезOPENCLAW_EXTRA_MOUNTS.
Права доступа + EACCES
Образ запускается от пользователяnode (uid 1000). Если вы видите ошибки
прав доступа на /home/node/.openclaw, убедитесь, что ваши bind-монты на хосте принадлежат
uid 1000.
Пример (хост Linux):
Более быстрые пересборки (рекомендуется)
Чтобы ускорить пересборки, упорядочьте Dockerfile так, чтобы слои зависимостей кешировались. Это позволяет не перезапускатьpnpm install, пока не изменятся
lock-файлы:
Настройка каналов (необязательно)
Используйте контейнер CLI для настройки каналов, затем при необходимости перезапустите Gateway (шлюз). WhatsApp (QR):OpenAI Codex OAuth (headless Docker)
Если в мастере вы выберете OpenAI Codex OAuth, он откроет URL в браузере и попытается принять callback наhttp://127.0.0.1:1455/auth/callback. В Docker или headless-настройках этот callback
может показать ошибку браузера. Скопируйте полный URL редиректа, на который вы
попадаете, и вставьте его обратно в мастер, чтобы завершить аутентификацию.
Проверка здоровья
E2E smoke-тест (Docker)
Smoke-тест импорта QR (Docker)
Примечания
- Привязка Gateway (шлюз) по умолчанию —
lanдля использования в контейнере. - CMD в Dockerfile использует
--allow-unconfigured; смонтированный конфиг сgateway.mode, а неlocal, всё равно запустится. Переопределите CMD, чтобы принудительно включить проверку. - Контейнер Gateway (шлюз) является источником истины для сеансов (
~/.openclaw/agents/<agentId>/sessions/).
Sandbox агента (Gateway (шлюз) на хосте + инструменты Docker)
Подробный разбор: SandboxingЧто он делает
Когда включёнagents.defaults.sandbox, неосновные сеансы выполняют инструменты внутри
Docker-контейнера. Gateway (шлюз) остаётся на вашем хосте, но выполнение инструментов
изолировано:
- область:
"agent"по умолчанию (один контейнер + рабочее пространство на агента) - область:
"session"для изоляции по сеансам - рабочая папка на область, смонтированная в
/workspace - необязательный доступ агента к рабочему пространству (
agents.defaults.sandbox.workspaceAccess) - политика разрешения/запрета инструментов (запрет имеет приоритет)
- входящие медиа копируются в активное рабочее пространство sandbox (
media/inbound/*), чтобы инструменты могли их читать (сworkspaceAccess: "rw"это попадает в рабочее пространство агента)
scope: "shared" отключает межсеансовую изоляцию. Все сеансы делят
один контейнер и одно рабочее пространство.
Профили sandbox на агента (multi-agent)
Если вы используете маршрутизацию multi-agent, каждый агент может переопределять настройки sandbox и инструментов:agents.list[].sandbox и agents.list[].tools (плюс
agents.list[].tools.sandbox.tools). Это позволяет запускать смешанные уровни доступа в одном Gateway
(шлюзе):
- Полный доступ (личный агент)
- Инструменты только для чтения + рабочее пространство только для чтения (семейный/рабочий агент)
- Без инструментов файловой системы/оболочки (публичный агент)
Поведение по умолчанию
- Образ:
openclaw-sandbox:bookworm-slim - Один контейнер на агента
- Доступ агента к рабочему пространству:
workspaceAccess: "none"(по умолчанию) использует~/.openclaw/sandboxes"ro"оставляет рабочее пространство sandbox в/workspaceи монтирует рабочее пространство агента только для чтения в/agent(отключаетwrite/edit/apply_patch)"rw"монтирует рабочее пространство агента для чтения/записи в/workspace
- Автоочистка: простой > 24 ч ИЛИ возраст > 7 дн.
- Сеть:
noneпо умолчанию (явно включайте, если нужен egress) - Разрешено по умолчанию:
exec,process,read,write,edit,sessions_list,sessions_history,sessions_send,sessions_spawn,session_status - Запрещено по умолчанию:
browser,canvas,nodes,cron,discord,gateway
Включение sandboxing
Если вы планируете устанавливать пакеты вsetupCommand, учтите:
- Значение
docker.networkпо умолчанию —"none"(без egress). readOnlyRoot: trueблокирует установку пакетов.userдолжен быть root дляapt-get(уберитеuserили установитеuser: "0:0"). OpenClaw автоматически пересоздаёт контейнеры при измененииsetupCommand(или конфигурации Docker), если контейнер не использовался недавно (в течение ~5 минут). «Горячие» контейнеры пишут предупреждение с точной командойopenclaw sandbox recreate ....
agents.defaults.sandbox.docker:
network, user, pidsLimit, memory,
memorySwap, cpus, ulimits, seccompProfile,
apparmorProfile, dns, extraHosts.
Multi-agent: переопределяйте agents.defaults.sandbox.{docker,browser,prune}.* для каждого агента через
agents.list[].sandbox.{docker,browser,prune}.* (игнорируется, когда agents.defaults.sandbox.scope / agents.list[].sandbox.scope равно
"shared").
Сборка образа sandbox по умолчанию
openclaw-sandbox:bookworm-slim с использованием Dockerfile.sandbox.
Общий образ sandbox (необязательно)
Если вам нужен образ sandbox с распространёнными инструментами сборки (Node, Go, Rust и т. д.), соберите общий образ:openclaw-sandbox-common:bookworm-slim. Чтобы использовать его:
Образ браузера sandbox
Чтобы запускать инструмент браузера внутри sandbox, соберите образ браузера:openclaw-sandbox-browser:bookworm-slim с использованием
Dockerfile.sandbox-browser. Контейнер запускает Chromium с включённым CDP и
необязательным наблюдателем noVNC (headful через Xvfb).
Примечания:
- Headful (Xvfb) снижает блокировку ботами по сравнению с headless.
- Headless всё ещё можно использовать, установив
agents.defaults.sandbox.browser.headless=true. - Полноценная среда рабочего стола (GNOME) не требуется; Xvfb обеспечивает дисплей.
- URL управления браузером sandbox (для инструмента
browser) - URL noVNC (если включён и headless=false)
browser (и удалите его из deny), иначе инструмент останется заблокированным.
Правила очистки (agents.defaults.sandbox.prune) применяются и к браузерным контейнерам.
Пользовательский образ sandbox
Соберите собственный образ и укажите его в конфигурации:Политика инструментов (allow/deny)
denyимеет приоритет надallow.- Если
allowпуст: доступны все инструменты (кроме запрещённых). - Если
allowнепуст: доступны только инструменты изallow(за вычетом deny).
Стратегия очистки
Два параметра:prune.idleHours: удалять контейнеры, не использовавшиеся X часов (0 = отключить)prune.maxAgeDays: удалять контейнеры старше X дней (0 = отключить)
- Сохранять активные сеансы, но ограничивать срок жизни:
idleHours: 24,maxAgeDays: 7 - Никогда не очищать:
idleHours: 0,maxAgeDays: 0
Примечания по безопасности
- Жёсткая изоляция применяется только к инструментам (exec/read/write/edit/apply_patch).
- Инструменты, работающие только на хосте, такие как browser/camera/canvas, по умолчанию заблокированы.
- Разрешение
browserв sandbox ломает изоляцию (браузер запускается на хосте).
Устранение неполадок
- Образ отсутствует: соберите с помощью
scripts/sandbox-setup.shили установитеagents.defaults.sandbox.docker.image. - Контейнер не запущен: он автоматически создаётся по требованию для каждого сеанса.
- Ошибки прав доступа в sandbox: установите
docker.userв UID:GID, соответствующие владельцу смонтированного рабочего пространства (или выполните chown для папки рабочего пространства). - Пользовательские инструменты не найдены: OpenClaw запускает команды с
sh -lc(login shell), который источает/etc/profileи может сбрасывать PATH. Установитеdocker.env.PATH, чтобы добавить ваши пути к инструментам (например,/custom/bin:/usr/local/share/npm-global/bin), или добавьте скрипт в/etc/profile.d/в вашем Dockerfile.