Перейти к основному содержанию
Запустите OpenClaw Gateway в rootless-контейнере Podman, управляемом вашим текущим пользователем без прав root. Предполагаемая модель:
  • Podman запускает контейнер Gateway.
  • Ваш хостовый CLI openclaw является плоскостью управления.
  • Постоянное состояние по умолчанию хранится на хосте в ~/.openclaw.
  • Повседневное управление использует openclaw --container <name> ... вместо sudo -u openclaw, podman exec или отдельного сервисного пользователя.

Предварительные требования

  • Podman в rootless-режиме
  • OpenClaw CLI, установленный на хосте
  • Необязательно: systemd --user, если нужен автозапуск под управлением Quadlet
  • Необязательно: sudo, только если вам нужен loginctl enable-linger "$(whoami)" для сохранения запуска после перезагрузки на headless-хосте

Быстрый старт

1

Однократная настройка

Из корня репозитория выполните ./scripts/podman/setup.sh.
2

Запустите контейнер Gateway

Запустите контейнер с помощью ./scripts/run-openclaw-podman.sh launch.
3

Запустите onboarding внутри контейнера

Выполните ./scripts/run-openclaw-podman.sh launch setup, затем откройте http://127.0.0.1:18789/.
4

Управляйте запущенным контейнером из хостового CLI

Задайте OPENCLAW_CONTAINER=openclaw, затем используйте обычные команды openclaw с хоста.
Детали настройки:
  • ./scripts/podman/setup.sh по умолчанию собирает openclaw:local в вашем rootless-хранилище Podman или использует OPENCLAW_IMAGE / OPENCLAW_PODMAN_IMAGE, если вы задали одну из этих переменных.
  • Он создает ~/.openclaw/openclaw.json с gateway.mode: "local", если файл отсутствует.
  • Он создает ~/.openclaw/.env с OPENCLAW_GATEWAY_TOKEN, если файл отсутствует.
  • Для ручных запусков вспомогательный скрипт читает из ~/.openclaw/.env только небольшой allowlist ключей, связанных с Podman, и передает контейнеру явные переменные окружения runtime; он не передает Podman весь env-файл.
Настройка под управлением Quadlet:
./scripts/podman/setup.sh --quadlet
Quadlet доступен только в Linux, потому что зависит от пользовательских служб systemd. Также можно задать OPENCLAW_PODMAN_QUADLET=1. Необязательные env-переменные сборки/настройки:
  • OPENCLAW_IMAGE или OPENCLAW_PODMAN_IMAGE — использовать существующий/загруженный образ вместо сборки openclaw:local
  • OPENCLAW_IMAGE_APT_PACKAGES — установить дополнительные apt-пакеты во время сборки образа (также принимает legacy OPENCLAW_DOCKER_APT_PACKAGES)
  • OPENCLAW_IMAGE_PIP_PACKAGES — установить дополнительные Python-пакеты во время сборки образа; фиксируйте версии и используйте только те индексы пакетов, которым доверяете
  • OPENCLAW_EXTENSIONS — предварительно установить зависимости plugins во время сборки
  • OPENCLAW_INSTALL_BROWSER — предварительно установить Chromium и Xvfb для автоматизации браузера (задайте 1, чтобы включить)
Запуск контейнера:
./scripts/run-openclaw-podman.sh launch
Скрипт запускает контейнер с вашими текущими uid/gid через --userns=keep-id и bind-монтирует ваше состояние OpenClaw в контейнер. Onboarding:
./scripts/run-openclaw-podman.sh launch setup
Затем откройте http://127.0.0.1:18789/ и используйте токен из ~/.openclaw/.env. Аутентификация моделей в Podman:
  • Используйте аутентификацию под управлением OpenClaw во время настройки: API-ключи Anthropic для Anthropic или браузерную OAuth/device-code-аутентификацию OpenAI Codex для OpenAI на базе Codex.
  • Лаунчер Podman не монтирует хостовые домашние каталоги учетных данных CLI, такие как ~/.claude или ~/.codex, в контейнер настройки или Gateway.
  • Существующие хостовые CLI-логины являются удобными путями на том же хосте. Для контейнерных установок храните аутентификацию провайдера в смонтированном состоянии ~/.openclaw, которым управляет настройка.
Хостовый CLI по умолчанию:
export OPENCLAW_CONTAINER=openclaw
После этого такие команды будут автоматически выполняться внутри этого контейнера:
openclaw dashboard --no-open
openclaw gateway status --deep   # включает дополнительное сканирование сервиса
openclaw doctor
openclaw channels login
На macOS машина Podman может заставить Gateway считать браузер нелокальным. Если Control UI после запуска сообщает об ошибках device-auth, используйте рекомендации по Tailscale в Podman и Tailscale.

Podman и Tailscale

Для HTTPS или удаленного доступа из браузера следуйте основной документации Tailscale. Примечание, специфичное для Podman:
  • Оставляйте хост публикации Podman равным 127.0.0.1.
  • Предпочитайте управляемый хостом tailscale serve вместо openclaw gateway --tailscale serve.
  • На macOS, если локальный контекст device-auth в браузере ненадежен, используйте доступ через Tailscale вместо специальных обходных решений с локальными туннелями.
См.:

Systemd (Quadlet, необязательно)

Если вы выполнили ./scripts/podman/setup.sh --quadlet, настройка устанавливает файл Quadlet в:
~/.config/containers/systemd/openclaw.container
Полезные команды:
  • Запуск: systemctl --user start openclaw.service
  • Остановка: systemctl --user stop openclaw.service
  • Статус: systemctl --user status openclaw.service
  • Логи: journalctl --user -u openclaw.service -f
После редактирования файла Quadlet:
systemctl --user daemon-reload
systemctl --user restart openclaw.service
Для сохранения запуска после перезагрузки на SSH/headless-хостах включите lingering для текущего пользователя:
sudo loginctl enable-linger "$(whoami)"

Конфигурация, env и хранилище

  • Каталог конфигурации: ~/.openclaw
  • Каталог рабочей области: ~/.openclaw/workspace
  • Файл токена: ~/.openclaw/.env
  • Вспомогательный скрипт запуска: ./scripts/run-openclaw-podman.sh
Скрипт запуска и Quadlet bind-монтируют состояние хоста в контейнер:
  • OPENCLAW_CONFIG_DIR -> /home/node/.openclaw
  • OPENCLAW_WORKSPACE_DIR -> /home/node/.openclaw/workspace
По умолчанию это каталоги хоста, а не анонимное состояние контейнера, поэтому openclaw.json, поагентные auth-profiles.json, состояние channels/providers, сессии и рабочая область сохраняются при замене контейнера. Настройка Podman также заполняет gateway.controlUi.allowedOrigins для 127.0.0.1 и localhost на опубликованном порту Gateway, чтобы локальная панель dashboard работала с non-loopback bind контейнера. Полезные env-переменные для ручного лаунчера:
  • OPENCLAW_PODMAN_CONTAINER — имя контейнера (по умолчанию openclaw)
  • OPENCLAW_PODMAN_IMAGE / OPENCLAW_IMAGE — образ для запуска
  • OPENCLAW_PODMAN_GATEWAY_HOST_PORT — порт хоста, сопоставленный с контейнерным 18789
  • OPENCLAW_PODMAN_BRIDGE_HOST_PORT — порт хоста, сопоставленный с контейнерным 18790
  • OPENCLAW_PODMAN_PUBLISH_HOST — интерфейс хоста для опубликованных портов; по умолчанию 127.0.0.1
  • OPENCLAW_GATEWAY_BIND — режим bind Gateway внутри контейнера; по умолчанию lan
  • OPENCLAW_PODMAN_USERNSkeep-id (по умолчанию), auto или host
Ручной лаунчер читает ~/.openclaw/.env перед финализацией значений контейнера/образа по умолчанию, поэтому эти настройки можно сохранить там. Если вы используете нестандартный OPENCLAW_CONFIG_DIR или OPENCLAW_WORKSPACE_DIR, задавайте одинаковые переменные как для ./scripts/podman/setup.sh, так и для последующих команд ./scripts/run-openclaw-podman.sh launch. Локальный для репозитория лаунчер не сохраняет пользовательские переопределения путей между shell-сессиями. Примечание Quadlet:
  • Сгенерированная служба Quadlet намеренно сохраняет фиксированную усиленную форму по умолчанию: опубликованные порты 127.0.0.1, --bind lan внутри контейнера и пользовательское пространство имен keep-id.
  • Она фиксирует OPENCLAW_NO_RESPAWN=1, Restart=on-failure и TimeoutStartSec=300.
  • Она публикует как 127.0.0.1:18789:18789 (Gateway), так и 127.0.0.1:18790:18790 (bridge).
  • Она читает ~/.openclaw/.env как runtime EnvironmentFile для значений вроде OPENCLAW_GATEWAY_TOKEN, но не использует allowlist переопределений, специфичных для Podman, из ручного лаунчера.
  • Если вам нужны пользовательские порты публикации, хост публикации или другие флаги запуска контейнера, используйте ручной лаунчер или напрямую отредактируйте ~/.config/containers/systemd/openclaw.container, затем перезагрузите и перезапустите службу.

Полезные команды

  • Логи контейнера: podman logs -f openclaw
  • Остановить контейнер: podman stop openclaw
  • Удалить контейнер: podman rm -f openclaw
  • Открыть URL dashboard из хостового CLI: openclaw dashboard --no-open
  • Health/status через хостовый CLI: openclaw gateway status --deep (RPC-зонд + дополнительное сканирование сервиса)

Устранение неполадок

  • Permission denied (EACCES) для конфигурации или рабочей области: По умолчанию контейнер запускается с --userns=keep-id и --user <your uid>:<your gid>. Убедитесь, что хостовые пути конфигурации/рабочей области принадлежат вашему текущему пользователю.
  • Запуск Gateway заблокирован (отсутствует gateway.mode=local): Убедитесь, что ~/.openclaw/openclaw.json существует и задает gateway.mode="local". scripts/podman/setup.sh создает его, если он отсутствует.
  • Команды CLI контейнера попадают не в ту цель: Используйте openclaw --container <name> ... явно или экспортируйте OPENCLAW_CONTAINER=<name> в своем shell.
  • openclaw update завершается ошибкой с --container: Это ожидаемо. Пересоберите/загрузите образ, затем перезапустите контейнер или службу Quadlet.
  • Служба Quadlet не запускается: Выполните systemctl --user daemon-reload, затем systemctl --user start openclaw.service. На headless-системах также может понадобиться sudo loginctl enable-linger "$(whoami)".
  • SELinux блокирует bind mounts: Не меняйте поведение монтирования по умолчанию; лаунчер автоматически добавляет :Z в Linux, когда SELinux работает в enforcing- или permissive-режиме.

Связанные материалы