OpenClaw в Docker нужен, когда Gateway должен работать постоянно: на VPS, домашнем сервере, отдельной машине или headless-хосте. Контейнерный запуск не отменяет настройку OpenClaw: нужно пройти onboarding, сохранить token, открыть Control UI, проверить Gateway и закрыть доступ снаружи.
- Когда Docker лучше обычной установки
- Требования для Docker-запуска
- Базовый запуск из репозитория
- Prebuilt image из GitHub Container Registry
- Открытие Control UI в Docker
- Проверка контейнерного Gateway
- Подключение каналов в Docker
- VPS: сетевой минимум
- Volumes, .env и резервные копии
- Обновление Docker-установки
- Ошибки Docker-запуска
- Минимальная серверная схема
- Источники для сверки
- Ответы на эти вопросы могут быть для вас полезными
- Можно ли запускать OpenClaw на VPS без Docker?
- Нужно ли открывать порт 18789 наружу?
- Что важнее: Docker или настройка доступа?
- Что изучать дальше по OpenClaw
Когда Docker лучше обычной установки
Обычная установка через `openclaw onboard —install-daemon` хороша для личного компьютера. Docker удобнее, когда нужен повторяемый запуск, отдельная среда, перенос на VPS и понятное управление процессом через Docker Compose. Мы получаем один набор файлов, `.env`, volumes, логи контейнеров и предсказуемый рестарт.
- VPS: Gateway работает без открытого терминала на вашем компьютере.
- Домашний сервер: OpenClaw живет на отдельной машине, а вы подключаетесь через каналы.
- Тестовая среда: можно поднять отдельный контейнер и не смешивать его с локальной установкой.
- Командная эксплуатация: проще описать окружение, секреты и обновления.
Если вы только знакомитесь с OpenClaw, начните с локальной установки и WebChat. Docker добавляйте после того, как уже понимаете Gateway, dashboard, model provider, pairing и basic security.
Требования для Docker-запуска
Официальная Docker-инструкция требует Docker Desktop или Docker Engine, Docker Compose v2, место под images и logs, а также хотя бы 2 GB RAM для сборки. На VPS с 1 GB RAM сборка может упасть с exit 137 из-за нехватки памяти во время `pnpm install`.
| Требование | Проверка | Что значит ошибка |
|---|---|---|
| Docker | `docker version` | Engine не установлен или daemon не запущен |
| Compose v2 | `docker compose version` | Старая установка или нет plugin |
| RAM | `free -h` на Linux | 1 GB может не хватить для сборки |
| Disk | `df -h` | Не хватает места под images, volumes и logs |
| Сеть | Доступ к GitHub, npm, API модели | Сборка или ответы агента будут падать |
docker version
docker compose version
df -h
Базовый запуск из репозитория
Официальный Docker-маршрут начинается из корня репозитория OpenClaw. Скрипт `./scripts/docker/setup.sh` собирает gateway image локально, запускает onboarding, записывает gateway token в `.env` и стартует Gateway через Docker Compose.
git clone https://github.com/openclaw/openclaw.git
cd openclaw
./scripts/docker/setup.sh
Во время onboarding подготовьте ключ провайдера модели. Не вставляйте токены в чужие инструкции и не коммитьте `.env`. В Docker-сценарии `.env` становится критичным файлом: там может лежать shared secret и настройки Gateway.
Prebuilt image из GitHub Container Registry
Если не хотите собирать образ на слабом VPS, можно использовать prebuilt image из GitHub Container Registry. Официальные docs показывают переменную `OPENCLAW_IMAGE`, после чего тот же setup script поднимает окружение с выбранным образом.
export OPENCLAW_IMAGE="ghcr.io/openclaw/openclaw:latest"
./scripts/docker/setup.sh
Для стабильного сервера я бы фиксировал tag, когда это возможно, а не жил вечно на `latest`. Так проще понимать, какая версия работала вчера и что изменилось после обновления.
Открытие Control UI в Docker
После запуска откройте Control UI по локальному адресу. Docker setup пишет token в `.env`, а если конфигурация переведена на password auth, используйте соответствующий пароль. Для повторного вывода ссылки официальная инструкция использует CLI-контейнер.
docker compose run --rm openclaw-cli dashboard --no-open
На локальной машине адрес обычно выглядит как `http://127.0.0.1:18789/`. На VPS нельзя просто открыть порт в интернет и забыть. Dashboard — точка управления ассистентом, поэтому наружу его выпускают только через защищенный канал: SSH tunnel, VPN/tailnet, reverse proxy с TLS и авторизацией или другой контролируемый слой.
Проверка контейнерного Gateway
Проверяйте три уровня: контейнеры запущены, Gateway отвечает, WebChat дает ответ. Если контейнер жив, но agent молчит, смотрите model provider, `.env`, логи и сетевой доступ до API.
docker compose ps
docker compose logs --tail=100 openclaw-gateway
docker compose run --rm openclaw-cli doctor
docker compose run --rm openclaw-cli gateway status
Название service может отличаться в зависимости от compose-файла, поэтому если команда логов не сработала, сначала посмотрите `docker compose ps`. Не меняйте сразу конфиг, пока не ясно, какой контейнер упал и почему.
Подключение каналов в Docker
Каналы в Docker настраиваются через тот же Gateway, но команды запускаются через CLI-контейнер. Для WhatsApp официальный пример использует QR-login, для Telegram — добавление token через channel command в Docker-инструкции или ручную настройку config/env в зависимости от выбранного потока.
# WhatsApp через QR
docker compose run --rm openclaw-cli channels login
# Telegram
docker compose run --rm openclaw-cli channels add --channel telegram --token "<token>"
# Discord
docker compose run --rm openclaw-cli channels add --channel discord --token "<token>"
После подключения канала не открывайте доступ всем. Для Telegram и WhatsApp проверьте `dmPolicy`, `allowFrom`, pairing и group policy. На сервере ошибка в access policy опаснее, чем на локальном ноутбуке: бот доступен постоянно.
VPS: сетевой минимум
VPS добавляет риск открытой сети. Даже если OpenClaw работает идеально локально, неправильный firewall превращает Control UI в публичную панель. Минимальная схема: SSH-доступ по ключу, закрытый порт dashboard, outbound-доступ к API модели, TLS для публичных endpoints, регулярные обновления и отдельный пользователь для сервиса.
- Не публикуйте `18789` наружу без защитного слоя.
- Оставьте dashboard на loopback или доступным через SSH tunnel.
- Храните `.env` с правами только для владельца.
- Разделяйте production workspace и тестовый workspace.
- Проверяйте логи перед обновлением и после него.
- Ограничивайте входящие соединения через firewall или provider security group.
# пример идеи: dashboard доступен только через SSH tunnel
ssh -L 18789:127.0.0.1:18789 user@your-vps
Volumes, .env и резервные копии
Контейнер сам по себе временный. Состояние OpenClaw, credentials, workspace и конфигурацию нужно хранить в volume или bind mount, иначе после пересоздания контейнера вы потеряете настройки. `.env` и credentials нельзя хранить в публичном репозитории.
Практический минимум для backup: compose-файл, `.env` в защищенном хранилище, workspace, credentials и список установленных skills/plugins. Перед восстановлением на другом сервере сначала поднимите Gateway без внешних каналов, проверьте WebChat, затем включайте Telegram или WhatsApp.
Обновление Docker-установки
Обновление зависит от того, собираете ли вы локальный image или используете prebuilt image. Безопасный порядок одинаковый: backup, чтение release notes, остановка, обновление image, старт, `doctor`, проверка Gateway, тест WebChat, тест одного внешнего канала.
- Сохранить `.env`, workspace и credentials.
- Зафиксировать текущий image tag или commit.
- Обновить image или репозиторий.
- Перезапустить Compose.
- Проверить `doctor`, `gateway status` и dashboard.
- Проверить pairing и allowlist для каналов.
docker compose pull
docker compose up -d
docker compose run --rm openclaw-cli doctor
Если вы собираете образ локально, вместо `pull` понадобится rebuild по инструкции проекта. На слабом VPS лучше использовать prebuilt image или временно добавить swap, иначе сборка может упереться в память.
Ошибки Docker-запуска
| Симптом | Причина | Проверка |
|---|---|---|
| Exit 137 при сборке | Не хватает RAM | 2 GB RAM или prebuilt image |
| Dashboard не открывается | Порт не проброшен, Gateway не слушает, token неверный | `docker compose ps`, logs, `.env` |
| Agent не отвечает | Нет model API key или сеть заблокирована | `doctor`, outbound HTTPS |
| WhatsApp QR не работает | Нет plugin, сессия не сохранилась, контейнер пересоздан без volume | Plugin, volume, logs |
| Telegram отвечает всем | Слишком широкая policy | `allowFrom`, `groupPolicy`, pairing |
Минимальная серверная схема
Для небольшого личного запуска достаточно одного VPS, Docker Compose, закрытого dashboard и одного внешнего канала. Я бы не начинал с Kubernetes, managed database и сложного reverse proxy. Сначала нужен устойчивый Gateway, понятная директория состояния и простая процедура восстановления.
- Один service user без лишних sudo-прав.
- Один каталог проекта, где лежат compose-файл, `.env` и backup-инструкция.
- Один persistent volume для состояния Gateway и channel sessions.
- Один способ доступа к Control UI: SSH tunnel или tailnet.
- Один внешний channel для старта, например Telegram.
- Один тест после перезапуска: dashboard, WebChat, внешний DM.
После недели стабильной работы можно добавлять второй channel, backup automation и отдельный staging workspace. До этого сложность только мешает: когда падает Gateway, нужно быстро понять, это Docker, token, сеть, модель или channel session.
Еще один хороший прием — держать короткий runbook рядом с compose-файлом. В нем достаточно 6 строк: как посмотреть status, как открыть dashboard через tunnel, как прочитать последние logs, где лежит backup, как перевыпустить token и как временно отключить внешний channel. Когда сервер падает ночью, такой runbook экономит больше времени, чем сложная диаграмма.
Runbook стоит проверить руками: остановить контейнер, поднять его заново, открыть dashboard через тот же tunnel и отправить тест в WebChat. Если владелец сервера не может выполнить эти действия без поиска по истории команд, серверный запуск еще не готов к публикации или постоянному использованию.
Источники для сверки
Ответы на эти вопросы могут быть для вас полезными
Можно ли запускать OpenClaw на VPS без Docker?
Можно. Обычная установка через daemon тоже подходит. Docker выбирают ради изоляции, повторяемости и удобного переноса, а не потому что без него OpenClaw не работает.
Нужно ли открывать порт 18789 наружу?
Нет. Для Control UI безопаснее использовать loopback, SSH tunnel, VPN/tailnet или reverse proxy с TLS и авторизацией. Открытый dashboard на VPS — плохая идея.
Что важнее: Docker или настройка доступа?
Настройка доступа. Docker упрощает запуск, но не защищает бота от слишком широкой policy, утекшего token или открытого Control UI.



