Чи підходить мені Docker?
- Так: вам потрібне ізольоване одноразове середовище gateway або запуск OpenClaw на хості без локальних інсталяцій.
- Ні: ви запускаєте на власній машині й хочете лише найшвидший dev loop. Натомість використовуйте звичайний процес інсталяції.
- Примітка щодо sandboxing: стандартний backend sandbox використовує Docker, коли sandboxing увімкнено, але sandboxing вимкнено за замовчуванням і не вимагає запускати весь gateway у Docker. Також доступні backend sandbox SSH і OpenShell. Див. Sandboxing.
Передумови
- Docker Desktop (або Docker Engine) + Docker Compose v2
- Щонайменше 2 ГБ RAM для збирання образу (
pnpm installможе бути завершено через OOM на хостах із 1 ГБ з кодом виходу 137) - Достатньо місця на диску для образів і журналів
- Якщо запускаєте на VPS/публічному хості, перегляньте
Посилення безпеки для мережевої доступності,
особливо політику firewall Docker
DOCKER-USER.
Контейнеризований gateway
Зберіть образ
openclaw/openclaw для хостів, які віддають перевагу Docker Hub:ghcr.io/openclaw/openclaw або openclaw/openclaw. Уникайте community
дзеркал Docker Hub, оскільки OpenClaw не контролює їхній час релізу,
перебудови або політику зберігання. Поширені офіційні теги: main, latest,
<version> (наприклад, 2026.2.26) і beta-версії, як-от
2026.2.26-beta.1. Beta-теги не переміщують latest або main.Повторний запуск в airgapped-середовищі
--offline перевіряє, що OPENCLAW_IMAGE вже існує локально, вимикає
неявні Compose pulls і builds, а потім запускає звичайний setup flow, зокрема
синхронізацію .env, виправлення дозволів, onboarding, синхронізацію конфігурації gateway
і запуск Compose.Якщо OPENCLAW_SANDBOX=1, offline setup також перевіряє налаштовані стандартні
та активні per-agent sandbox images у daemon за
OPENCLAW_DOCKER_SOCKET. Docker-backed browser images також мають містити
поточну мітку browser contract OpenClaw. Коли потрібний образ відсутній або
несумісний, setup завершується без зміни конфігурації sandbox, замість того щоб
повідомляти про успіх із непридатним sandbox.Завершіть onboarding
- запитає ключі API provider
- згенерує токен gateway і запише його в
.env - створить каталог secret key auth-profile
- запустить gateway через Docker Compose
openclaw-gateway. openclaw-cli призначений для команд, які ви запускаєте після того,
як контейнер gateway уже існує.Відкрийте Control UI
http://127.0.0.1:18789/ у браузері та вставте налаштований
shared secret у Settings. Setup script за замовчуванням записує токен у .env;
якщо ви перемкнете конфігурацію контейнера на password auth, використовуйте
натомість цей пароль.Потрібна URL-адреса ще раз?Ручний flow
Якщо ви віддаєте перевагу запускати кожен крок самостійно замість використання setup script:docker compose з кореня репозиторію. Якщо ви увімкнули OPENCLAW_EXTRA_MOUNTS
або OPENCLAW_HOME_VOLUME, setup script записує docker-compose.extra.yml;
додавайте його після будь-якого стандартного override file, наприклад
-f docker-compose.yml -f docker-compose.override.yml -f docker-compose.extra.yml,
коли існують обидва override files.openclaw-cli використовує network namespace openclaw-gateway, це
post-start tool. Перед docker compose up -d openclaw-gateway запускайте onboarding
і записи конфігурації під час setup через openclaw-gateway з
--no-deps --entrypoint node.Змінні середовища
Setup script приймає такі необов’язкові змінні середовища:| Змінна | Призначення |
|---|---|
OPENCLAW_IMAGE | Використати віддалений образ замість локального збирання |
OPENCLAW_IMAGE_APT_PACKAGES | Встановити додаткові apt-пакети під час build (розділені пробілами) |
OPENCLAW_IMAGE_PIP_PACKAGES | Встановити додаткові Python-пакети під час build (розділені пробілами) |
OPENCLAW_EXTENSIONS | Попередньо встановити залежності plugin під час build (назви, розділені пробілами) |
OPENCLAW_DOCKER_BUILD_NODE_OPTIONS | Перевизначити параметри Node для локального source-build |
OPENCLAW_DOCKER_BUILD_TSDOWN_MAX_OLD_SPACE_MB | Перевизначити heap tsdown для локального source-build у МБ |
OPENCLAW_DOCKER_BUILD_SKIP_DTS | Пропустити declaration output під час runtime-only local image builds |
OPENCLAW_EXTRA_MOUNTS | Додаткові bind mounts хоста (розділені комами source:target[:opts]) |
OPENCLAW_HOME_VOLUME | Зберігати /home/node у named Docker volume |
OPENCLAW_SANDBOX | Увімкнути sandbox bootstrap (1, true, yes, on) |
OPENCLAW_SKIP_ONBOARDING | Пропустити інтерактивний крок onboarding (1, true, yes, on) |
OPENCLAW_DOCKER_SOCKET | Перевизначити шлях до Docker socket |
OPENCLAW_DISABLE_BONJOUR | Вимкнути рекламу Bonjour/mDNS (за замовчуванням 1 для Docker) |
OPENCLAW_DISABLE_BUNDLED_SOURCE_OVERLAYS | Вимкнути bind-mount overlays вихідного коду bundled plugin |
OTEL_EXPORTER_OTLP_ENDPOINT | Спільний endpoint OTLP/HTTP collector для експорту OpenTelemetry |
OTEL_EXPORTER_OTLP_*_ENDPOINT | Signal-specific OTLP endpoints для traces, metrics або logs |
OTEL_EXPORTER_OTLP_PROTOCOL | Перевизначення протоколу OTLP. Наразі підтримується лише http/protobuf |
OTEL_SERVICE_NAME | Назва сервісу, що використовується для ресурсів OpenTelemetry |
OTEL_SEMCONV_STABILITY_OPT_IN | Увімкнути найновіші експериментальні semantic attributes GenAI |
OPENCLAW_OTEL_PRELOADED | Пропустити запуск другого OpenTelemetry SDK, якщо один уже preloaded |
brew; ці залежності мають бути надані custom image
або встановлені вручну. Для залежностей, доступних із пакетів Debian, використовуйте
OPENCLAW_IMAGE_APT_PACKAGES під час збирання образу. Legacy-назва
OPENCLAW_DOCKER_APT_PACKAGES досі приймається.
Для Python-залежностей використовуйте OPENCLAW_IMAGE_PIP_PACKAGES. Це запускає
python3 -m pip install --break-system-packages під час збирання образу, тому закріплюйте
версії пакетів і використовуйте лише індекси пакетів, яким довіряєте.
Source builds встановлюють OPENCLAW_DOCKER_BUILD_NODE_OPTIONS за замовчуванням на
--max-old-space-size=8192 і залишають
OPENCLAW_DOCKER_BUILD_TSDOWN_MAX_OLD_SPACE_MB невстановленою, щоб wrapper tsdown міг
враховувати memory limits контейнера. Вони також встановлюють
OPENCLAW_DOCKER_BUILD_SKIP_DTS=1 за замовчуванням, оскільки runtime images видаляють declaration
files після build. Якщо Docker повідомляє ResourceExhausted, cannot allocate memory або переривається під час tsdown, збільште memory limit Docker builder або
повторіть із меншими явними heaps, наприклад
OPENCLAW_DOCKER_BUILD_NODE_OPTIONS=--max-old-space-size=4096 OPENCLAW_DOCKER_BUILD_TSDOWN_MAX_OLD_SPACE_MB=4096.
Maintainers можуть тестувати вихідний код bundled plugin із packaged image, монтувавши
один каталог вихідного коду plugin поверх його packaged source path, наприклад
OPENCLAW_EXTRA_MOUNTS=/path/to/fork/extensions/synology-chat:/app/extensions/synology-chat:ro.
Цей змонтований каталог вихідного коду перевизначає відповідний скомпільований
bundle /app/dist/extensions/synology-chat для того самого plugin id.
Спостережуваність
Експорт OpenTelemetry є outbound із контейнера Gateway до вашого OTLP collector. Він не потребує опублікованого Docker port. Якщо ви локально збираєте образ і хочете, щоб bundled OpenTelemetry exporter був доступний усередині образу, додайте його runtime dependencies:@openclaw/diagnostics-otel із ClawHub у
packaged Docker installs перед увімкненням експорту. Custom source-built images все ще можуть
містити локальний вихідний код plugin через
OPENCLAW_EXTENSIONS=diagnostics-otel. Щоб увімкнути експорт, дозвольте й увімкніть
plugin diagnostics-otel у конфігурації, а потім встановіть
diagnostics.otel.enabled=true або скористайтеся прикладом конфігурації в Експорт OpenTelemetry
. Заголовки auth collector налаштовуються через
diagnostics.otel.headers, а не через змінні середовища Docker.
Prometheus metrics використовують уже опублікований порт Gateway. Встановіть
clawhub:@openclaw/diagnostics-prometheus, увімкніть
plugin diagnostics-prometheus, а потім scrape:
/metrics або unauthenticated reverse-proxy path. Див.
Prometheus metrics.
Health checks
Container probe endpoints (автентифікація не потрібна):HEALTHCHECK, який опитує /healthz.
Якщо перевірки й далі не проходять, Docker позначає контейнер як unhealthy, а
системи оркестрації можуть перезапустити або замінити його.
Автентифікований глибокий знімок стану:
LAN проти loopback
scripts/docker/setup.sh за замовчуванням встановлює OPENCLAW_GATEWAY_BIND=lan, щоб доступ із хоста до
http://127.0.0.1:18789 працював через публікацію порту Docker.
lan(за замовчуванням): браузер хоста й CLI хоста можуть дістатися опублікованого порту gateway.loopback: лише процеси всередині мережевого простору імен контейнера можуть напряму дістатися gateway.
gateway.bind (lan / loopback / custom /
tailnet / auto), а не псевдоніми хоста на кшталт 0.0.0.0 або 127.0.0.1.Локальні провайдери хоста
Коли OpenClaw працює в Docker,127.0.0.1 всередині контейнера — це сам контейнер,
а не ваша хост-машина. Використовуйте host.docker.internal для AI-провайдерів, які
працюють на хості:
| Провайдер | URL хоста за замовчуванням | URL для налаштування Docker |
|---|---|---|
| LM Studio | http://127.0.0.1:1234 | http://host.docker.internal:1234 |
| Ollama | http://127.0.0.1:11434 | http://host.docker.internal:11434 |
docker-compose.yml зіставляє host.docker.internal із
host gateway Docker для Linux Docker Engine. Docker Desktop уже надає
те саме ім’я хоста в macOS і Windows.
Сервіси хоста також мають слухати на адресі, доступній із Docker:
docker run, додайте те саме
зіставлення хоста самостійно, наприклад
--add-host=host.docker.internal:host-gateway.
Бекенд Claude CLI у Docker
Офіційний образ Docker OpenClaw не встановлює Claude Code наперед. Установіть і увійдіть у Claude Code всередині користувача контейнера, який запускає OpenClaw, а потім збережіть домашній каталог цього контейнера, щоб оновлення образу не стерли бінарний файл або стан автентифікації Claude. Для нових інсталяцій Docker увімкніть постійний том/home/node перед запуском
налаштування:
.env перед повторним запуском налаштування. Скрипт налаштування не читає
.env самостійно; він перезаписує .env з поточної оболонки та стандартних значень. Для
згенерованого .env виконайте:
.env містить значення, які ваша оболонка не може завантажити, вручну повторно експортуйте
наявні значення, на які ви покладаєтеся, як-от OPENCLAW_IMAGE, порти, режим прив’язування,
користувацькі шляхи, OPENCLAW_EXTRA_MOUNTS, пісочницю та налаштування пропуску онбордингу.
Згенероване накладання монтує домашній том і для openclaw-gateway, і для
openclaw-cli.
Запускайте решту команд зі згенерованим накладанням Compose, щоб обидва сервіси
монтували збережений домашній каталог. Якщо ваше налаштування також використовує docker-compose.override.yml,
додайте його перед docker-compose.extra.yml.
Установіть Claude Code у цей збережений домашній каталог:
claude у
/home/node/.local/bin/claude. Вкажіть OpenClaw використовувати цей шлях контейнера:
claude-cli:
OPENCLAW_HOME_VOLUME зберігає нативну інсталяцію Claude Code у
/home/node/.local/bin і /home/node/.local/share/claude, а також налаштування Claude Code
і стан автентифікації в /home/node/.claude та /home/node/.claude.json.
Зберігати лише /home/node/.openclaw недостатньо для повторного використання Claude CLI. Якщо
ви використовуєте OPENCLAW_EXTRA_MOUNTS замість домашнього тому, змонтуйте всі ці
шляхи Claude в обидва сервіси Docker.
Bonjour / mDNS
Мережа Docker bridge зазвичай ненадійно пересилає multicast Bonjour/mDNS (224.0.0.251:5353). Тому вбудоване налаштування Compose за замовчуванням встановлює
OPENCLAW_DISABLE_BONJOUR=1, щоб Gateway не потрапляв у цикл аварійних перезапусків і не
перезапускав рекламування повторно, коли bridge відкидає multicast-трафік.
Використовуйте опублікований URL Gateway, Tailscale або wide-area DNS-SD для хостів Docker.
Встановлюйте OPENCLAW_DISABLE_BONJOUR=0 лише під час запуску з host networking, macvlan
або іншою мережею, де відомо, що multicast mDNS працює.
Підводні камені та усунення несправностей див. у виявленні Bonjour.
Сховище та збереження
Docker Compose bind-монтуєOPENCLAW_CONFIG_DIR у /home/node/.openclaw,
OPENCLAW_WORKSPACE_DIR у /home/node/.openclaw/workspace, а
OPENCLAW_AUTH_PROFILE_SECRET_DIR у /home/node/.config/openclaw, тож ці
шляхи переживають заміну контейнера. Коли будь-яку змінну не встановлено, вбудований
docker-compose.yml повертається до шляхів під ${HOME} або /tmp, якщо самого HOME
також немає. Це не дає docker compose up виводити специфікацію тому з порожнім джерелом
у мінімальних середовищах.
Цей змонтований каталог конфігурації — місце, де OpenClaw зберігає:
openclaw.jsonдля конфігурації поведінкиagents/<agentId>/agent/auth-profiles.jsonдля збереженої OAuth/API-key автентифікації провайдера.envдля runtime-секретів на основі env, як-отOPENCLAW_GATEWAY_TOKEN
OPENCLAW_CONFIG_DIR.
Установлені завантажувані plugins зберігають стан своїх пакетів у змонтованому
домашньому каталозі OpenClaw, тож записи встановлення plugin і корені пакетів переживають
заміну контейнера. Запуск Gateway не генерує дерева залежностей вбудованих plugins.
Повні відомості про збереження в розгортаннях VM див.
Docker VM Runtime - Що де зберігається.
Гарячі точки зростання диска: стежте за media/, файлами JSONL сесій, спільною
базою даних стану SQLite, коренями пакетів установлених plugins і ротаційними файловими логами
в /tmp/openclaw/.
Допоміжні засоби оболонки (необов’язково)
Для простішого щоденного керування Docker установітьClawDock:
scripts/shell-helpers/clawdock-helpers.sh, повторно виконайте команду встановлення вище, щоб ваш локальний допоміжний файл відстежував нове розташування.
Потім використовуйте clawdock-start, clawdock-stop, clawdock-dashboard тощо. Виконайте
clawdock-help, щоб побачити всі команди.
Повний посібник із допоміжних засобів див. у ClawDock.
Enable agent sandbox for Docker gateway
Enable agent sandbox for Docker gateway
docker.sock лише після проходження передумов пісочниці. Якщо
налаштування пісочниці не може завершитися, скрипт скидає agents.defaults.sandbox.mode
до off. Ходи Codex у code-mode все ще обмежені Codex
workspace-write, поки пісочниця OpenClaw активна; не монтуйте
сокет Docker хоста в контейнери пісочниці агента.Automation / CI (non-interactive)
Automation / CI (non-interactive)
-T:Docker Desktop DNS failures in openclaw-cli
Docker Desktop DNS failures in openclaw-cli
openclaw-cli після скидання NET_RAW, що проявляється як
EAI_AGAIN під час команд на основі npm, як-от openclaw plugins install.
Залишайте стандартний посилений compose-файл для звичайної роботи gateway. Наведене нижче
локальне перевизначення послаблює безпекову позицію контейнера CLI, відновлюючи
стандартні capabilities Docker, тому використовуйте його лише для одноразової команди CLI,
якій потрібен доступ до реєстру пакетів, а не як ваш стандартний виклик Compose:openclaw-cli, пересоздайте його
з тим самим перевизначенням. docker compose exec і docker exec не можуть
змінити Linux capabilities у вже створеному контейнері.Permissions and EACCES
Permissions and EACCES
node (uid 1000). Якщо ви бачите помилки прав доступу для
/home/node/.openclaw, переконайтеся, що ваші bind mounts на хості належать uid 1000:blocked plugin candidate: suspicious ownership (... uid=1000, expected uid=0 or root)
з подальшим plugin present but blocked. Це означає, що uid процесу та власник
змонтованого каталогу plugin не збігаються. Надавайте перевагу запуску контейнера зі
стандартним uid 1000 і виправленню власника bind mount. Виконуйте chown
/path/to/openclaw-config/npm до root:root лише якщо навмисно запускаєте
OpenClaw як root довгостроково.Faster rebuilds
Faster rebuilds
pnpm install, якщо lockfiles не змінюються:Параметри контейнера для досвідчених користувачів
Параметри контейнера для досвідчених користувачів
node. Для
більш функціонального контейнера:- Збережіть
/home/node:export OPENCLAW_HOME_VOLUME="openclaw_home" - Вбудуйте системні залежності:
export OPENCLAW_IMAGE_APT_PACKAGES="git curl jq" - Вбудуйте залежності Python:
export OPENCLAW_IMAGE_PIP_PACKAGES="requests==2.32.5 humanize==4.14.0" - Вбудуйте Playwright Chromium:
export OPENCLAW_INSTALL_BROWSER=1 - Або встановіть браузери Playwright у збережений том:
- Збережіть завантаження браузера: використовуйте
OPENCLAW_HOME_VOLUMEабоOPENCLAW_EXTRA_MOUNTS. OpenClaw автоматично виявляє керований Playwright Chromium з Docker-образу в Linux.
OpenAI Codex OAuth (Docker без графічного інтерфейсу)
OpenAI Codex OAuth (Docker без графічного інтерфейсу)
Метадані базового образу
Метадані базового образу
node:24-bookworm-slim і включає tini як init-процес точки входу (PID 1), щоб гарантувати прибирання zombie-процесів і коректну обробку сигналів у довготривалих контейнерах. Він публікує анотації базового образу OCI, зокрема org.opencontainers.image.base.name,
org.opencontainers.image.source та інші. Дайджест базового образу Node
оновлюється через PR Dependabot для базових Docker-образів; релізні збірки не запускають
шар оновлення дистрибутива. Див.
анотації образів OCI.Запускаєте на VPS?
Див. Hetzner (Docker VPS) і середовище виконання Docker VM, щоб дізнатися про спільні кроки розгортання VM, зокрема вбудовування бінарних файлів, збереження даних та оновлення.Пісочниця агента
Колиagents.defaults.sandbox увімкнено з бекендом Docker, Gateway
запускає виконання інструментів агента (оболонку, читання/запис файлів тощо) всередині ізольованих Docker-
контейнерів, тоді як сам Gateway залишається на хості. Це створює жорстку межу
навколо недовірених або багатокористувацьких сеансів агентів без контейнеризації всього
Gateway.
Область пісочниці може бути окремою для кожного агента (стандартно), кожного сеансу або спільною. Кожна область
отримує власний робочий простір, змонтований у /workspace. Також можна налаштувати
політики дозволу/заборони інструментів, ізоляцію мережі, обмеження ресурсів і браузерні
контейнери.
Повну конфігурацію, образи, нотатки щодо безпеки та профілі для кількох агентів див. тут:
- Пісочниця — повний довідник із пісочниці
- OpenShell — інтерактивний доступ оболонки до контейнерів пісочниці
- Пісочниця та інструменти для кількох агентів — перевизначення для окремих агентів
Швидке ввімкнення
docker build.
Усунення несправностей
Образ відсутній або контейнер пісочниці не запускається
Образ відсутній або контейнер пісочниці не запускається
scripts/sandbox-setup.sh
(робоча копія джерельного коду) або вбудованої команди docker build з Пісочниця § Образи та налаштування (встановлення npm),
або встановіть для agents.defaults.sandbox.docker.image ваш власний образ.
Контейнери автоматично створюються для кожного сеансу на вимогу.Помилки дозволів у пісочниці
Помилки дозволів у пісочниці
docker.user на UID:GID, що відповідає власнику змонтованого робочого простору,
або змініть власника теки робочого простору за допомогою chown.Користувацькі інструменти не знайдено в пісочниці
Користувацькі інструменти не знайдено в пісочниці
sh -lc (оболонка входу), що зчитує
/etc/profile і може скинути PATH. Установіть docker.env.PATH, щоб додати на початок ваші
шляхи до користувацьких інструментів, або додайте сценарій у /etc/profile.d/ у вашому Dockerfile.Збірку образу завершено через OOM-kill (код виходу 137)
Збірку образу завершено через OOM-kill (код виходу 137)
Потрібна авторизація або сполучення в Control UI
Потрібна авторизація або сполучення в Control UI
Ціль Gateway показує ws://172.x.x.x або помилки сполучення з Docker CLI
Ціль Gateway показує ws://172.x.x.x або помилки сполучення з Docker CLI
Пов’язане
- Огляд встановлення — усі способи встановлення
- Podman — альтернатива Podman для Docker
- ClawDock — спільнотне налаштування Docker Compose
- Оновлення — підтримання OpenClaw в актуальному стані
- Конфігурація — конфігурація Gateway після встановлення