Аудитория: команды, где Gateway и CLI openclaw в разных сервисах Compose, в логах Gateway «зелёный», а CLI получает gateway closed (WebSocket 1006/1008), pairing required или два независимых токена (env и файл). Тезис: зафиксировать семантику URL (TCP по DNS сервиса или общий Unix‑сокет), свести OPENCLAW_GATEWAY_TOKEN и gateway.auth.* к единому источнику правды, при необходимости сузить вызов через общее сетевое пространство имён. Отличие от апрельской статьи 1008 + trustedProxies: там крупные CIDR; здесь — как контейнер адресует Gateway и читает токен. Дополнительно: сеть Docker, сопоставление токенов, тома.
127.0.0.1: loopback — только текущий контейнер; используйте DNS Compose, напр. http://openclaw-gateway:18789.OPENCLAW_GATEWAY_TOKEN может перекрыть файл — похоже на чередование 401/1008.gateway.sock один путь на хосте и согласованные UID/GID.network_mode: service:<gateway>, либо везде DNS TCP — не смешивать в одном тикете.Пока пять пунктов не закрыты, смена тега образа редко лечит контракт namespace/токена.
Сопоставьте метки времени stderr Gateway, stdout CLI и docker events — «случайные» обрывы часто совпадают с рестартами или агрессивными healthcheck.
| Симптом | Дальше смотреть | Обычно |
|---|---|---|
1006 + новый PID / OOM | логи хоста/ядра → лимиты рестартов → таймауты | обрыв транспорта ≠ только политика pairing |
1008 + pairing | истина токена → URL Gateway → состояние на диске | двойной mount / недоступные каталоги |
Connection refused только в CLI | зонд внутри того же контейнера | ошибка loopback / неопубликованный порт |
| Сокет ENOENT / доступ | ls -la томов и родительские каталоги | сокет не виден дочернему namespace |
Сами по себе коды закрытия мало значат: связывайте 1006/1008 с логами Gateway, машиной состояний pairing и ретраями reverse proxy.
docker compose config..openclaw: одно дерево записи (чеклист томов).openclaw gateway status и doctor: выровнять метки времени хоста и контейнера.network_mode: service:<gateway>, согласованно с trustedProxies.Перед Gateway стоит Nginx/Caddy — согласуйте Upgrade/idle с URL Compose (обратный прокси), иначе 1006 перепутаете с авторизацией.
# Подставьте имена/тома, затем docker compose config
services:
openclaw-gateway:
environment:
- OPENCLAW_CONFIG_DIR=/data/.openclaw
- OPENCLAW_GATEWAY_TOKEN=${OPENCLAW_GATEWAY_TOKEN}
volumes:
- oc-data:/data/.openclaw
networks: [oc-net]
openclaw-cli:
environment:
- OPENCLAW_CONFIG_DIR=/data/.openclaw
- OPENCLAW_GATEWAY_URL=http://openclaw-gateway:18789
- OPENCLAW_GATEWAY_TOKEN=${OPENCLAW_GATEWAY_TOKEN}
volumes:
- oc-data:/data/.openclaw
networks: [oc-net]
depends_on:
- openclaw-gateway
networks:
oc-net:
driver: bridge
volumes:
oc-data:
Продакшену нужны предсказуемые рестарты, базовая линия диска и аудируемая история pairing. На выделенном удалённом Mac в шести регионах и с понятным биллингом месяц/квартал это лучше сочетается с ротацией секретов CI. См. цены аренды Mac mini и центр помощи, затем отразите переменные из этого runbook.
Большинство сбоев Compose — namespace + токен + каталог состояния, описанные в трёх разных документах. Без повторяемого рукопожатия WebSocket внутри контейнера не «меняйте образ» и не «отключайте TLS». Далее — GHCR и Control UI и жёсткие прокси.
FAQ
Пересечение с апрельской статьёй trustedProxies?
Там CIDR и субтрафик; здесь URL, сокеты, namespaces, один токен — читайте обе.
curl на хосте означает успех CI?
Нет. Повторите проверку в том же образе контейнера.