2026 Производство Docker OpenClaw
Compose · обновления образов · тома и базовый уровень systemd

Команды, которым нужна изоляция контейнеров для OpenClaw Gateway, но боятся ручного редактирования в ночи обновлений, обычно отдают предпочтение Compose, именованным томам и дайджестам изображений. В этой статье изложен воспроизводимый производственный путь Docker с четким отличием от локального руководства по Ubuntu 24.04 + systemd + Tunnel: базовые показатели, форма docker-compose.yml, постоянные тома, обновления образов и проверки работоспособности, а также таблица симптомов для распространенных сбоев контейнеров.

01

Как это руководство разделяет работу со статьей о «голом железе» systemd + Tunnel

Путь «голого железа» сводит к минимуму абстракцию: процессы на хосте, systemd для перезапуска, туннель для публичного доступа. Путь Docker меняет артефакт с «каталоги + юнит-файлы» на «изображения + создание»: обновления в основном заключаются в получении нового дайджеста, воссоздании контейнеров и проверке правильности монтирования. Оба могут держать шлюз в режиме обратной связи с TLS на границе; Развилка заключается в том, принимаете ли вы управление цепочкой поставок изображений и объемом в обмен на воспроизводимость и более тонкие откаты.

Если вы уже стандартизировали реестры, сканирование и SBOM, Compose зачастую является наиболее простой рабочей формой. Один VPS с низким оттоком все еще может быть дешевле на бумаге, если использовать только systemd. Шесть болевых точек, приведенных ниже, взяты из реальных тредов сортировки — они сообщают вам, готовы ли вы к контейнерам.

  1. 01

    Лечениеlatestкак версия:дайджест контактов или неизменяемые теги сборки в производстве; в противном случае «это сработало прошлой ночью» не соответствует никакому слою файловой системы.

  2. 02

    Запекание конфига в образы:используйте env, secrets или монтирование только для чтения; в противном случае каждая ротация токена вызывает перестройку и препятствует доставке контейнера.

  3. 03

    Анонимные тома заполнения дисков:безымянные тома кэша от экспериментов спокойно потребляют/var/lib/docker; предпочитайте именованные тома или внешнее объектное хранилище.

  4. 04

    Проверки работоспособности, которые всегда возвращают 200:проверка только порта HTTP без готовности модели/конфигурации приводит к появлению массовых ошибок 502 после смены трафика.

  5. 05

    Конфигурации Compose и Tunnel расходятся:вход по-прежнему указывает на старый опубликованный порт, что делает внешние симптомы не связанными с журналами контейнера.

  6. 06

    Принудительное размещение рабочих нагрузок macOS в контейнерах Linux:то же, что и в статье о «голом железе» — задания Xcode/симулятора принадлежат удаленным исполнителям Mac, а не «магической песочнице» Linux.

Если вы можете ответить «откуда берутся образы, какие тома хранят, кому принадлежат обновления», переходите к базовым показателям и шаблонам. Если нет, напишите одностраничный текст на этапе подготовки, прежде чем приступать к производству.

При запуске обоих путей используйте один контракт топологии прослушивания + туннеля: сопоставьте контейнеры с адресом 127.0.0.1 на кольцевой проверке хоста и завершите TLS в Cloudflared или его эквиваленте. Миграция systemd → Compose затем заменяет только супервизор процесса, а не границу безопасности.

Если вы поддерживаете как установочные сценарии, так и репозиторий Compose, объявите единый источник истины — либо Compose является каноническим, а CI отображает фрагменты systemd для редких случаев «голого железа», либо наоборот. Двойной сдвиг обычно проявляется в том, что порты, имена томов и пути окружения изменяются только с одной стороны.

Контейнеры облегчают ад зависимостей, но не устраняют необходимости секретной ротации или аудита. Рассматривать env_file как сейф без разрешений и ротации с моральной точки зрения то же самое, что и фиксацию токенов — только с отложенной датой инцидента.

02

Таблица решений: Compose Production, systemd Bare Metal и публичная привязка

Обратите внимание на «минуты на установку» рядом со «стоимостью ежеквартального обновления»: контейнеры стоят дороже, но повторяются лучше. Замените имена-заполнители/порты своими реальными значениями.

ИзмерениеШлюз на публичном IPsystemd + петля + туннель (голое железо)Производство Docker Compose
Единица доставкиСвернутые вручную каталоги/скриптыМодуль + файлы конфигурацииДайджест изображения + создание файла
Путь обновленияВысокий дрейфЗаменить двоичный файл/конфигурацию, выполнить ролл systemctlИзвлеките образ, воссоздайте контейнеры, проверьте тома
ИзоляцияСлабыйСредний (пользователи/разрешения)Сильнее (пространства имен/группы — не полные виртуальные машины)
НаблюдаемостьСделай самв журнале все ясноУнифицируйте журналы докера или дополнительные агенты
Типичная стоимостьСамый высокий риск безопасностиУмеренный скриптингЦепочка поставок изображений + объем операций

Compose объявляет среду выполнения + постоянство + границы зависимостей; если вы отказываетесь называть тома и теги, вы лишь откладываете хаос до тех пор, пока не сработает предупреждение о диске.

03

Предварительные требования: Docker Engine, Compose v2 и определение размера.

В Ubuntu 24.04 LTS или аналогичной версии установите поддерживаемый Docker Engine и плагин Compose v2 ( docker compose ), избегая использования устаревшего автономного двоичного файла docker-compose, который отличает CI от prod. Бюджет оперативной памяти за пределами шлюза для журналов, временной распаковки и одновременных подключений; отдельно наблюдайте за ростом /var/lib/docker.

Безопасность соответствует стандартной статье: нет общедоступных прослушивателей портов приложений, только ключи SSH, брандмауэр с запретом по умолчанию. Контейнеры добавляют пространства имен — они не реализуют волшебным образом TLS или политику доступа.

  1. 01

    Версии выводов:захватыватьdocker versionиdocker compose versionв Runbook; выровнять второстепенные этапы подготовки/продукции.

  2. 02

    Драйвер журнала + ротация:с набором json-файлов по умолчаниюmax-size/max-fileпоэтому один болтливый контейнер не может заполнить диск.

  3. 03

    Выделенная сеть:объявите собственный мост в Compose, чтобы по умолчанию разговаривали только шлюз и туннель.

  4. 04

    Дисциплина реестра:реестр документов, имя образа, дайджест; При извлечении prod следует использовать тот же реестр, который вы тестировали — избегайте docker.io в dev и частного реестра в prod без отслеживания.

  5. 05

    Стратегия объема/привязки:Монтируется конфигурация только для чтения, тома с возможностью записи только для среды выполнения/кэша, секреты в виде файлов режима 400 или секреты Docker.

  6. 06

    Репетируйте вниз/вверх:в постановочном запускеdocker compose downзатемup -d; убедитесь, что тома сохранились, и восходящий туннель по-прежнему нацелен на правый порт обратной связи.

info

Примечание:настоящие имена изображений OpenClaw, ключи env и флаги CLI соответствуют исходной документации — YAML ниже является иллюстративным; замените заполнители и удалите неиспользуемые ключи перед прод.

04

Составьте скелет: порты, тома, проверки работоспособности, команды обновления.

Публикуйте с адресом 127.0.0.1:host:container, чтобы шлейф хоста подключал туннель — тот же контракт, что и «только привязка шлейфа» в руководстве по «голому железу». Проверки работоспособности должны подтверждать готовность HTTP; если восходящий поток отправляет команду проверки конфигурации, расширьте start_ period, чтобы новые контейнеры не уничтожались в середине загрузки.

docker-compose.yml
services:
  openclaw-gateway:
    image: ghcr.io/example/openclaw-gateway@sha256:<DIGEST>
    restart: unless-stopped
    env_file:
      - ./gateway.env
    volumes:
      - openclaw_data:/var/lib/openclaw
      - ./gateway.yaml:/etc/openclaw/gateway.yaml:ro
    ports:
      - "127.0.0.1:8787:8787"
    healthcheck:
      test: ["CMD", "curl", "-fsS", "http://127.0.0.1:8787/health"]
      interval: 30s
      timeout: 5s
      retries: 3
      start_period: 40s

volumes:
  openclaw_data:

Порядок обновления: ① docker Compose извлекает промежуточную версию для проверки дайджеста; ② резервное копирование данных именованного тома или экспорт конфигурации; ③ prod docker compose up -d --no-deps --build (удалить --build, если не используется) и следить за работоспособностью; ④ скручивание от хоста и через туннель; ⑤ только после этого рассмотрите возможность сокращения образа Docker (опасно, если вам все еще нужны слои отката).

Стек сортировки: журналы контейнера для конфигурации/разрешений; хост ss -tlnp для привязки по шлейфу; вход в туннель для правого порта. Если Интернет видит 502, но Curl 127.0.0.1 работает, подозревайте маршрутизацию, а не изображение в первую очередь.

Для синего/зеленого цвета кратковременно запустите два проекта составления (разные имена проектов и порты обратной связи) и сместите веса в туннеле или внутреннем LB; затем docker compose -p old_project down или старые контейнеры сохраняют блокировки томов и фоновую работу.

Если шлюз должен достичь сокета Unix хоста или коляски локальной модели, внимательно изучите network_mode:host — он обходит часть изоляции карты портов и должен проверяться двумя людьми.

warning

Предупреждение:никогда не совершайgateway.envс ключами API; CI не должен печатать визуализированную среду Compose. Неправильный UID/GID тома часто проявляется в виде ненадежных проверок работоспособности, а не мгновенных сбоев.

05

Точные цифры и примечания по топологии для дежурного документа

Используйте их для согласования с платформой «контейнеры не являются бесплатным обедом»; замените на свои показатели P95 и кривые диска.

Оповещение о количестве перезапусков, неработоспособной продолжительности и использовании тома — не только процессора. Службы типа шлюза часто активизируются только после исчерпания дисковых или файловых дескрипторов.

  • Layers and disk: frequent pulls of large bases can add tens of GB per month under /var/lib/docker; pair alerts with volume backup policy.
  • Health intervals: too tight amplifies jitter, too loose slows traffic cutover; 30s interval + sane start_period is a common starting point.
  • Rollback window: keep at least one known-good digest and annotate compose with the change ticket—avoid “rollback == latest”.

Контейнеры Linux подходят для шлюзов OpenClaw, очередей и легкой оркестровки, но Xcode, симуляторы и функции Apple Silicon упираются в жесткие препятствия — платите навсегда за прокладки совместимости или переносите выполнение на выделенные компьютеры Mac. По сравнению с запуском шлюзов на ноутбуках или «временных» хостах, где спящий режим, обновления и запросы нарушают автоматизацию, выделенные удаленные компьютеры Mac по контракту согласовывают долгоживущие рабочие нагрузки Apple, в то время как Linux сохраняет Docker или systemd для плоскости управления — домены сбоев остаются чистыми. Для стабильных агентов и конвейеров построения обычно лучшим решением является аренда облачного Mac Mini NodeMini: храните шлюз в VPS-контейнере и передавайте тяжелую работу на заказываемые исполнительные узлы вместо исправления неправильного уровня.

FAQ

FAQ

Да — разделение по среде (промежуточный Compose, prod systemd) или по службе. Разделите контракт прослушивания+туннеля, чтобы два шлюза никогда не конкурировали за один и тот же порт обратной связи. Другие публикации OpenClaw:фильтр категории.

Проверятьdocker logsи соответствует ли команда работоспособности новым путям к изображениям; проверьте разрешения тома и env. Чтобы получить больше вычислений, просмотритестоимость арендыдля удаленных узлов Mac.

Найдитесправочный центрдля SSH/VNC и сети. Для работы с контейнерной сетью также проверьте правила брандмауэра хоста иdocker network.