2026 OpenClaw официальный Docker: docker-setup.sh, GHCR и Control UI (18789) Runbook

Около 13 минут чтения · MACCOME

Аудитория: инженеры, которые читают официальную Docker-документацию, но прыгают между таймаутами локальной сборки, сбоями pull GHCR, конфликтом порта 18789 и правами на томах, блокирующими Skills, без одного упорядоченного пути от clone до Control UI. Результат: стандартизировать на docker-setup.sh плюс опциональный OPENCLAW_IMAGE, разделить работу с Docker production, сетью Docker и томами/правами. Структура: шесть ловушек, матрица, шестишаговый runbook, таблица триажа, три KPI, выводы.

Почему «по документации» всё равно ломается на Docker

Официальный сценарий предполагает согласованные Docker Engine, Compose, диск и выход. Добавьте npm-global или другой checkout compose — сбои выглядят как «OpenClaw сломан». Шесть частых причин в 2025–2026:

  1. Не разделяют сборку из исходников и pull GHCR: заставляют docker build на слабом CI сети, не переключаясь на OPENCLAW_IMAGE.
  2. Старые контейнеры на 18789: предыдущие попытки compose не остановлены — новый docker-setup.sh не может привязать Control UI.
  3. Несовпадение UID/GID на томах: пользователь контейнера и права хоста ~/.openclaw — записи Skills/состояния падают, UI кажется «мёртвым».
  4. Ошибочно считают сопряжение проблемой образа: WebSocket/токены — в статье сопряжение/токены, а не бесконечный compose pull.
  5. Корпоративный прокси: npm да, ghcr.io нет: зеркало или allowlist; тот же класс диагностики, что в runbook по установке npm.
  6. Несколько checkout делят env/тома: иногда устаревшие токены из смешанных каталогов.

Таблица 1: локальная сборка vs OPENCLAW_IMAGE (GHCR)

В тикете выберите один основной путь и задокументируйте откат на другом — избегайте смешения «на словах».

ИзмерениеСборка из исходников по умолчаниюOPENCLAW_IMAGE тянет GHCR
Когда лучшеСвои правки Dockerfile, отладка кэша сборки, нет выхода в ghcrБыстрее всего до UI, слабый канал, CI кэширует образы, а не репозитории
УсловияДостаточно CPU/RAM; гигабайты под кэш слоёвДоступен ghcr.io или внутреннее зеркало; фиксировать теги за пределами голого latest
РискиТаймауты сборки, раздутый кэш, конкуренция за CPUАутентификация/лимиты, дрейф тега, расхождение конфига с бинарником
ОткатПерейти на готовый образ, сохранив тот же путь к данным томаВернуть предыдущий digest или вернуться к сборке из исходников; логировать изменения compose
info

Заметка: upstream-репозитории меняются; команды ниже предполагают checkout с docker-setup.sh в корне — при другом форке фиксируйте коммит и путь к скрипту.

Шестишаговый runbook: clone до Control UI на 18789

  1. Предпроверка Docker: docker version и Compose v2; место под слои/тома (как в таблице ресурсов production).
  2. Clone и корень репозитория: docker-setup.sh исполняемый (chmod +x при необходимости).
  3. (Опционально) Готовый образ: export OPENCLAW_IMAGE=ghcr.io/openclaw/openclaw:latest — в production фиксируйте digest или стабильные теги, а не только движущиеся теги.
  4. Запуск скрипта: ./docker-setup.sh; в логах pull/build и compose up без немедленного ненулевого выхода.
  5. Открыть Control UI: http://127.0.0.1:18789 (другая ревизия → порт по build); страница загружается, не connection refused.
  6. Кратчайшая проверка: документированный healthcheck в UI или CLI; для сопряжения — дерево сопряжение/токены до смены конфигурации приложения.
bash
# Предпочесть готовый образ GHCR (тег по политике)
export OPENCLAW_IMAGE="ghcr.io/openclaw/openclaw:latest"
./docker-setup.sh

# После успеха Control UI должен открыться (пример: порт 18789)
# open http://127.0.0.1:18789

Таблица 2: симптомы → проверки (порядок триажа)

Сверху вниз; не меняйте образ, сеть и тома одновременно.

СимптомСначалаЕщё прочитать
Таймаут сборки / OOMПерейти на OPENCLAW_IMAGE; ограничить параллелизм buildkit; почистить кэшDocker production (ресурсы)
401/403/TLS при pullAllowlist прокси для ghcr.io; внутреннее зеркало — не только npm registryRunbook npm (прокси)
address already in use :18789docker ps на старые контейнеры; остановить старый compose или порт по документацииСеть Docker
Permission denied на томахUID/GID хоста и пользователь контейнера; named vs bindЧеклист томов/Skills
UI открывается, канал молчитИсключить модель/каналы; затем коды токена/WSСопряжение/токены

Три KPI для тикетов и дашбордов

  1. Идентичность образа: логировать registry + tag + digest, когда доступно — не только «взяли latest»; откат по digest.
  2. Достижимость Control UI: отдельно HTTP 200 / заголовок / healthcheck от «процесс контейнера есть».
  3. Контракт томов: сопоставить хост ~/.openclaw (или путь команды) с mount compose; снимок размера и прав до/после обновления.

Если release notes upstream расходятся — доверяйте upstream; статья даёт инженерные контрольные точки.

Почему ноутбучный пробник редко становится production Gateway

Сон, фрагментированные диски и остатки Docker Desktop противоречат выделенному CPU, стабильному выходу, аудируемым томам и границам токенов. Эфемерные контейнеры без закреплённых digest, без контракта томов и healthcheck падают на первом реальном трафике.

Команды, которые долго держат Gateway на стабильном Apple Silicon, после этого короткого цикла выигрывают от облачных Mac MACCOME с несколькими регионами и гибкой арендой — публичные тарифы аренды и центр помощи вместе со статьями production и сопряжения.

Пилот: все шесть шагов на выделенном удалённом хосте, зафиксировать digest и снимки томов, затем условия месяца/квартала и мониторинг.

FAQ

Сначала эту статью или Docker production?

Этот runbook — первый успешный путь к UI; production — окна изменений, откат и мониторинг. Тарифы: цены аренды Mac mini.

Конфликтует ли OPENCLAW_IMAGE с глобальной npm CLI?

Конфликты сходятся к портам, окружению и каталогам данных; один основной Gateway на хост. Порядок миграции: runbook установки npm.

Можно ли открыть 18789 в интернет?

Поставьте reverse proxy и TLS спереди — читайте разделы безопасности в production/reverse-proxy вместо слепой привязки к 0.0.0.0. Помощь: центр помощи Mac mini.