OpenClaw Docker на VPS в 2026
Exit 137 и ошибки Control UI: сводная таблица

mem_limit · первый проход WASM · allowedOrigins · сопряжение через compose exec · шаблон compose

OpenClaw Docker на VPS — диагностика

После запуска по инструкции docker compose на малом VPS чаще всего три картины: мгновенный выход 137, долгое отсутствие ответа на 18789, Control UI с non-loopback или ошибками Host. Статья даёт сначала чеклист по free -h, mem_limit и окну 3–7 минут на первую WASM-компиляцию, затем таблицу симптом → доказательство в docker logs → действие для Exit 137, прав на томах и рассинхрона монтирования; далее таблицу решений по 127.0.0.1, allowedOrigins и обратному прокси для UI; в конце шестишаговый runbook сопряжения в контейнере и десять пунктов перед продом. Вместе с OpenClaw v2026.4 — установка и усиление Docker, установка Gateway и чеклист doctor и эксплуатационный разбор в три блока это переводит задачу из «контейнер поднялся» в «стабильно без постоянного контроля».

01

Ресурсы в первую очередь: free -h, mem_limit и «зависшая» первая WASM-сборка

При первом старте OpenClaw Gateway в контейнере высокая загрузка CPU при позднем открытии порта чаще всего фаза компиляции WASM, а не взаимная блокировка. Как в статье v2026.4: если свободная память на хосте и mem_limit слишком малы, OOM в Linux даёт Exit 137, иногда без явного сообщения приложения в логах.

  1. 01

    Хост: выполнить free -h; устойчивый запас заметно ниже примерно 1,5–2 ГиБ повышает риск 137; без swap ещё сильнее.

  2. 02

    Compose: задать mem_limit: 2g или выше и не конкурировать по памяти с тяжёлыми сервисами на той же машине.

  3. 03

    Первое окно: после холодного старта выждать 3–7 минут до вывода об ошибке; docker logs -f покажет, идёт ли ещё цепочка компиляции.

  4. 04

    Healthcheck: healthcheck.start_period не меньше 360 с, чтобы compose не перезапускал процесс до завершения WASM.

  5. 05

    Ложные срабатывания: не повторять docker compose restart внутри первого окна — каждый рестарт снова даёт пик холодного старта.

Эти пять пунктов на первой странице runbook «OpenClaw на VPS» снижают число тикетов «сделал по гайду, не поднимается». Многоуровневый разбор Gateway: статья по эксплуатации.

02

Exit 137, права на томах, рассинхрон монтирования: симптомы, docker logs и действия

Таблица выстроена как сначала доказательство, потом действие, чтобы увести тикеты от «шлюз сломан» к воспроизводимым полям. Вместе с чеклистом doctor по установке удобно ссылаться на строки в шаблоне тикета.

Симптомdocker logs / хостПриоритетное действие
Сразу 137dmesg с OOM или обрыв логаПоднять mem_limit или класс инстанса; снизить конкуренцию
Permission denied на workspaceТом с владельцем root, пользователь node в контейнере без записиchown на UID контейнера или согласовать user: с томом
Конфиг не применяетсяДва пути к .openclaw на хосте и в composeОдин bind; перед рестартом docker compose config
Нестабильный DNScurl из контейнера к endpoint модели — таймаутПроверить dns Docker и резолв на хосте по длинной статье
Циклы рестартов без новых логовСлишком агрессивный healthcheckУвеличить start_period и retries

Эффективность Docker-разбора зависит от того, доказан ли 137 как OOM, а не принят наугад за баг приложения.

Если Gateway на VPS сочетается с постоянно доступным удалённым Mac, разделяйте приёмку «ресурсы контейнера» (compose, логи) и «SLA узла» (зона, окна обслуживания).

03

Control UI, привязка 127.0.0.1 и обратный прокси: allowedOrigins и варианты Host

Публикация 18789 в интернет с VPS — типичная ошибка. В статье по установке рекомендуется только loopback в контейнере, TLS на Caddy или Nginx на 443. Ошибка non-loopback в Control UI означает расхождение Origin браузера и разрешённых Origins у шлюза, а не «сломан Docker».

СценарийПрослушивание / проксиНастройка
Отладка через локальный SSH-туннель127.0.0.1:18789allowedOrigins включает http://127.0.0.1:18789
Боевой HTTPS по доменуПрокси на loopback-upstreamallowedOrigins с https://ваш-домен; по возможности без Host-отката
Временная лабораторияHTTP на внутренний IPЯвно перечислить IP-источники; сузить CIDR; убрать после работ
«Срочно увидеть UI»TLS снаружи всё равно желателенHost-откат из документации только осознанно; затем откатить
json
{
  "gateway": {
    "mode": "local",
    "controlUi": {
      "allowedOrigins": ["https://openclaw.example.com"]
    }
  }
}

Заметка: после правок openclaw.json проверьте, не попадает ли docker compose restart в первое WASM-окно и не суммируется ли это с ложной диагностикой из раздела 2.

04

Шестишаговый runbook: docker compose exec, devices list, approve, пути

Для openclaw в контейнере HOME и том конфигурации должны совпадать с рабочим процессом, иначе «на хосте approve, в контейнере pending». Имя сервиса здесь openclaw — замените на своё в compose.

  1. 01

    Имя сервиса: docker compose ps — контейнер с Gateway.

  2. 02

    Та же среда: docker compose exec openclaw sh -lc 'pwd; echo $HOME; ls -la ~/.openclaw | head'

  3. 03

    Список запросов: docker compose exec openclaw openclaw devices list

  4. 04

    Request ID: из UI или лога, затем openclaw devices approve <id>.

  5. 05

    Видимость API-ключа: при No API key found for provider убедиться, что .env попадает в контейнер через compose, а не только в shell-профиль хоста.

  6. 06

    Поля тикета: путь к compose, тег образа, краткий openclaw.json, команда approve для повторного использования.

Важно: openclaw devices approve на хосте при том, что конфиг смонтирован только в контейнере, даёт ложный отрицательный результат.

05

Воспроизводимый каркас compose, десять проверок перед продом и ноутбук вместо сервера

Три типичных интервала проверки — заполните реальными метриками хоста и добавьте в README, чтобы новые участники не повторяли одни и те же ошибки.

  • Бюджет первого старта: после холодного старта не меньше 3–7 минут до открытия тикета; рестарты раньше трёх минут усиливают 137.
  • Уровень памяти: на инстанс держать стабильно выше 2 ГиБ свободного запаса на хосте; ниже — масштабировать, а не наращивать функции.
  • Ротация логов: для json-file Docker, например, ≤10 МиБ на файл, ≤3 файла, чтобы диск не стал вторичной аварией.
Перед продомКритерий успеха
01ports только 127.0.0.118789 недоступен из интернета напрямую
02env_file и пути секретов согласованыКлюч провайдера модели читается в контейнере
03mem_limit и политика swap задокументированыНагрузочный прогон без 137
04healthcheck.start_period ≥ 360sНет шторма рестартов в первом окне
05В openclaw.json gateway.mode = localНевалидные ключи убраны
06TLS и HSTS на проксиНет предупреждений mixed content
07allowedOrigins покрывает реальные OriginНет non-loopback в Control UI
08Сопряжение устройств проверено внутри контейнераdevices list пуст или всё approved
09Резервная копия пути .openclaw и версииВосстановление по одной странице runbook
10Согласовано с документацией каналовДоступны колбэки IM или webhook
yaml
services:
  openclaw:
    image: ghcr.io/openclaw/openclaw:latest
    restart: unless-stopped
    mem_limit: 2g
    ports:
      - "127.0.0.1:18789:18789"
    volumes:
      - ${HOME}/.openclaw:/home/node/.openclaw
    env_file:
      - .env
    healthcheck:
      test: ["CMD", "curl", "-f", "http://127.0.0.1:18789/health"]
      interval: 60s
      timeout: 15s
      retries: 5
      start_period: 360s

Постоянный Gateway на ноутбуке страдает от сна, закрытой крышки и нестабильного uplink; домашний канал редко даёт измеримый SLA. Облачный Mac mini с поминутной или периодической оплатой лучше подходит для гибридных сценариев OpenClaw на VPS с графикой или Xcode.

Частая ошибка: 0.0.0.0:18789 «для удобной отладки» на публичном VPS — это вынос контрольной плоскости под сканеры.

Если нужен стабильный Docker-шлюз и тяжёлые шаги на macOS с договорной фиксацией, закупка и синхронизация между площадками часто дороже аренды. Для узлов 7×24 с проверяемым SLA и гибкими размерами аренда Mac mini в облаке VpsMesh часто выгоднее: зафиксируйте в архитектуре разделение VPS OpenClaw и выделенного удалённого Mac, оцените ёмкость по ценам аренды и оформлению заказа — это проще закрепить в договоре, чем устные обещания.

FAQ

Частые вопросы

Сначала dmesg на хосте и mem_limit на предмет OOM; заложите окно первой WASM-компиляции. Базовые ресурсы сверьте с статьёй OpenClaw v2026.4.

В openclaw.json в gateway.controlUi.allowedOrigins указать реальный HTTPS-Origin и проверить, что прокси не передаёт неверный Host на upstream. Полный поток: чеклист установки Gateway.

Через docker compose exec тот же пользователь и те же монтирования, что у Gateway, затем openclaw devices list. Иначе эксплуатационный разбор в три блока. Ёмкость: цены аренды, оформить заказ; связь: центр помощи.