CLI commands

Парк устройств

openclaw fleet

openclaw fleet управляет полноценными экземплярами OpenClaw, называемыми ячейками. Каждая ячейка имеет собственные Gateway, состояние, учетные данные, учетные записи каналов, контейнер и порт хоста, доступный только через loopback-интерфейс. Используйте отдельную ячейку для каждой границы доверия арендатора; не используйте один общий Gateway как границу между недоверенными арендаторами.

Fleet является экспериментальной функцией. Пока этот интерфейс стабилизируется, названия команд, флаги, форматы вывода и профиль контейнера могут изменяться между выпусками без периода устаревания.

Fleet поддерживает Docker и Podman. Образ по умолчанию — ghcr.io/openclaw/openclaw:latest.

Fleet протестирована на хостах Linux и macOS. Хосты Windows в настоящее время не тестировались.

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

bash
openclaw fleet create acmeopenclaw fleet status acmeopenclaw fleet list

fleet create однократно выводит сгенерированный токен Gateway вместе с URL ячейки. Немедленно сохраните токен, затем настройте учетные записи каналов каждого арендатора внутри его ячейки.

Идентификаторы арендаторов

Идентификаторы арендаторов должны соответствовать выражению:

text
^[a-z0-9](?:[a-z0-9-]{0,38}[a-z0-9])?$

Допускаются от 1 до 40 строчных букв, цифр и внутренних дефисов. Идентификатор должен начинаться и заканчиваться буквой или цифрой. Прописные буквы, символы подчеркивания, косые черты, точки, пробельные символы и строки обхода путей, такие как ../acme, отклоняются.

Идентификатор становится частью имени контейнера: openclaw-cell-<tenant>.

fleet create

Создайте ячейку и запустите ее:

bash
openclaw fleet create acme

Создайте ячейку Podman на фиксированном порту, не запуская ее:

bash
openclaw fleet create acme \  --runtime podman \  --port 19125 \  --no-start

Передавайте переменные среды конкретного арендатора, повторяя --env:

bash
openclaw fleet create acme \  --env TZ=America/Los_Angeles \  --env OPENCLAW_DISABLE_BONJOUR=1

Ключи переменных среды могут содержать буквы, цифры и символы подчеркивания и не могут начинаться с цифры. Значения должны быть однострочными, поскольку Fleet передает их через защищенный файл среды выполнения. Fleet отклоняет попытки переопределить управляемые переменные пути контейнера и токена Gateway, перечисленные в разделе Хранилище и структура контейнера.

Параметры создания

Параметр Значение по умолчанию Описание
--image <ref> ghcr.io/openclaw/openclaw:latest Образ контейнера для ячейки.
--runtime <runtime> docker CLI контейнера: docker или podman.
--port <number> Автоматически выделяется начиная с 19100 Порт хоста на loopback-интерфейсе. Явно выбранный порт не должен принадлежать другой зарегистрированной ячейке.
--memory <value> 2g Ограничение памяти контейнера в синтаксисе Docker/Podman.
--cpus <value> 2 Ограничение ресурсов ЦП контейнера.
--disk <size> Нет Ограничивает доступный для записи слой контейнера, если серверная часть хранилища поддерживает квоты.
--network <mode> bridge Режим исходящей сети: bridge или internal.
--pids-limit <number> 512 Максимальное количество процессов в контейнере.
--env &lt;KEY=VALUE&gt; Нет Передает переменную среды в ячейку. Повторите для нескольких значений.
--gateway-token <value> Случайный 32-символьный шестнадцатеричный токен Использует предоставленный токен Gateway вместо создания нового. См. Обработка токенов.
--no-start Ячейка запускается Создает контейнер, не запуская его.
--json Удобочитаемый вывод Выводит данные в машиночитаемом формате.

При автоматическом выделении выбирается первый неиспользуемый порт реестра, равный 19100 или превышающий его. Fleet отклоняет повторяющиеся идентификаторы арендаторов и явно заданные порты, уже назначенные другой ячейке.

Ссылки на образы передаются среде выполнения контейнера как один аргумент. Пустые ссылки и значения, начинающиеся с -, отклоняются, чтобы образ нельзя было интерпретировать как параметр Docker или Podman.

Выбранная конечная точка Docker или Podman должна быть локальной. Fleet отклоняет удаленные контексты Docker, конечные точки DOCKER_HOST и удаленные службы Podman до резервирования порта или создания локального состояния; для удаленных хостов ячеек требуется отдельный контракт хранилища и конечных точек, поэтому они не входят в эту минимально жизнеспособную версию.

Когда Fleet запускает новую ячейку, команда создания ожидает примерно до минуты, пока ее Gateway не ответит на /healthz. Если ячейка не переходит в исправное состояние, Fleet сохраняет ее контейнер и строку реестра для fleet status, fleet logs или явного удаления. --no-start пропускает эту проверку работоспособности. Сгенерированный токен Gateway новой неисправной ячейки не теряется — он остается в среде контейнера (docker|podman inspect), а поскольку ячейка еще не обслуживала трафик, fleet rm --force с последующим повторным созданием всегда является безопасной альтернативой.

Фиксация по дайджесту

Команды создания и обновления принимают ссылки на образы, зафиксированные по дайджесту, например --image ghcr.io/openclaw/openclaw@sha256:<digest>. Fleet передает ссылку на образ в Docker или Podman дословно, что позволяет оператору оставить ячейку на неизменяемом содержимом образа вместо изменяющегося тега.

Результат создания содержит идентификатор арендатора, имя контейнера, порт хоста, токен Gateway и локальный URL. Даже при выводе в формате JSON считайте результат содержащим секрет, поскольку он включает токен.

Ограничения дискового пространства

--disk ограничивает только доступный для записи слой контейнера. Подключенные с хоста каталоги состояния и аутентификации отдельных арендаторов остаются в хранилище хоста; если для этих каталогов также требуется жесткое ограничение, используйте проектные квоты файловой системы хоста.

Среда выполнения/серверная часть хранилища Поддержка --disk
Docker overlay2 на XFS Требуется параметр монтирования XFS pquota.
Docker btrfs или zfs Поддерживается драйвером хранилища.
Podman overlay Требуется хранилище на основе XFS.
Другие серверные части Создание контейнера завершается ошибкой демона и выводом рекомендаций Fleet для серверной части.

Политика исходящего трафика

Режим Docker Podman
bridge Поддерживается; по умолчанию исходящий трафик не ограничен. Поддерживается; по умолчанию исходящий трафик не ограничен.
internal Отклоняется, поскольку Docker не сохраняет опубликованный loopback-порт Gateway во внутренней сети. Поддерживается; loopback-порт Gateway остается опубликованным, а исходящий трафик блокируется.

Для Docker сохраните режим моста и применяйте политику исходящего трафика с помощью правил межсетевого экрана хоста, например цепочки DOCKER-USER.

fleet list

Выведите список ячеек в порядке идентификаторов арендаторов:

bash
openclaw fleet listopenclaw fleet lsopenclaw fleet list --json

Таблица содержит:

Столбец Значение
tenant Идентификатор арендатора.
state Текущее состояние контейнера по результатам проверки Docker или Podman. unknown означает, что среда выполнения недоступна либо существует контейнер с именем ячейки, но его метки владения Fleet не соответствуют записи реестра (сигнал коллизии или вмешательства — проверьте его вручную перед выполнением действий).
port Порт хоста на loopback-интерфейсе, сопоставленный с Gateway ячейки.
image Зарегистрированный образ контейнера.
created Время создания ячейки.

Строки реестра остаются видимыми, когда Docker или Podman недоступны; только текущее состояние становится unknown.

fleet status

Проверьте одну ячейку:

bash
openclaw fleet status acmeopenclaw fleet status acme --json

Состояние объединяет строку реестра Fleet, текущие сведения о контейнере и короткий запрос, выполняемый по мере возможности, к адресу:

text
http://127.0.0.1:<host-port>/healthz

Результат проверки работоспособности — ok, failed или skipped. /healthz подтверждает работоспособность Gateway, но не полную готовность всех настроенных каналов или плагинов. Проверка пропускается, если нет пригодной для проверки локальной конечной точки.

fleet logs

Передавайте поток журналов контейнера ячейки непосредственно в терминал:

bash
openclaw fleet logs acmeopenclaw fleet logs acme --followopenclaw fleet logs acme --tail 200openclaw fleet logs acme --since 10m

Перед чтением журналов Fleet проверяет метки владения зарегистрированного контейнера, поэтому отказывается читать сторонний контейнер с ожидаемым именем ячейки. Нажмите Ctrl-C, чтобы завершить --follow, не считая остановку оператором ошибкой команды. Вывод журналов проходит через фильтр редактирования, который заменяет текущий токен Gateway ячейки на <redacted> до поступления данных в терминал.

У fleet logs нет режима --json, поскольку журналы контейнера представляют собой необработанный поток stdout/stderr. В сценариях ограничивайте объем вывода с помощью --tail и используйте обычное перенаправление или конвейеры командной оболочки.

fleet start, fleet stop и fleet restart

Управляйте существующей ячейкой с помощью сохранённой для неё среды выполнения:

bash
openclaw fleet start acmeopenclaw fleet stop acmeopenclaw fleet restart acme

Эти команды работают с зарегистрированным именем контейнера. Они завершаются ошибкой, если арендатор неизвестен или сохранённая среда выполнения не может выполнить операцию.

fleet upgrade

Повторно загрузите сохранённый образ и замените контейнер ячейки:

bash
openclaw fleet upgrade acme

Переведите ячейку на другой образ:

bash
openclaw fleet upgrade acme --image ghcr.io/openclaw/openclaw:<version>

При обновлении целевой образ загружается, существующий контейнер и сеть отдельной ячейки проверяются, контейнер останавливается и удаляется, а затем создаётся и запускается заново. При замене сохраняются тот же порт хоста, каталоги данных, отдельная мостовая сеть ячейки, профиль среды выполнения, ограничения ресурсов, политика перезапуска, переменные окружения под управлением Fleet и значения, изначально переданные с помощью --env. Смонтированное состояние сохраняется при замене контейнера; переменные окружения образа по умолчанию могут измениться вместе с целевым образом.

Замена фиксируется только после того, как её Gateway ответит на /healthz через порт обратной петли ячейки в соответствии с контрактом проверки работоспособности, используемым официальным compose-файлом. Если заменяющий контейнер завершается, циклически аварийно перезапускается или не становится работоспособным примерно за минуту, он удаляется, а предыдущий контейнер восстанавливается, поэтому неисправный образ не выводит из строя работающую ячейку.

Токен Gateway намеренно не сохраняется в реестре Fleet. Перед удалением старого контейнера Fleet считывает его окружение и переносит OPENCLAW_GATEWAY_TOKEN в новый контейнер. Не удаляйте старый контейнер вручную перед обновлением, если токен больше нигде не хранится под вашим контролем.

fleet backup и fleet restore

Создайте резервную копию одной остановленной ячейки:

bash
openclaw fleet stop acmeopenclaw fleet backup acme --out ./acme.tgz

Восстановите этот архив в зарегистрированную ячейку:

bash
openclaw fleet restore acme --from ./acme.tgz

Для этих команд требуются привилегии оператора хоста. Архивы содержат состояние арендатора и секреты аутентификации, создаются с режимом 0600 и должны храниться как учётные данные. Резервное копирование не выполняется для работающей ячейки, чтобы состояние SQLite было сохранено согласованно. Восстановление не выполняется для работающей ячейки без параметра --force, заменяет состояние только этого арендатора, обновляет токен Gateway и однократно выводит новый токен. Fleet создаёт резервную копию только одного арендатора за раз; резервное копирование всех арендаторов выполняется оператором отдельно.

Обе команды принимают --max-bytes <bytes> для ограничения объёма архивируемых или извлекаемых файловых данных и применяют одинаковый фиксированный лимит в один миллион сегментов путей архива, чтобы архивные бомбы, состоящие только из метаданных, не могли исчерпать индексные дескрипторы хоста, а любую принятую резервную копию можно было восстановить. Команда резервного копирования принимает --out <path>, а обе команды поддерживают --json.

Архивы содержат только обычные файлы и каталоги. При резервном копировании символьные и жёсткие ссылки, сокеты и узлы устройств никогда не просматриваются и не сохраняются; количество пропущенных объектов указывается в результате. При восстановлении архивы с записями любого другого типа отклоняются. Воспроизводимые деревья символьных ссылок, такие как node_modules рабочей области, после восстановления необходимо заново установить внутри ячейки.

fleet doctor

Проверьте все ячейки или одного арендатора без изменения состояния среды выполнения или файловой системы:

bash
openclaw fleet doctoropenclaw fleet doctor acme --json

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

fleet rm

Удалите остановленную ячейку из среды выполнения и реестра, сохранив данные арендатора:

bash
openclaw fleet rm acme

Для работающего контейнера требуется --force:

bash
openclaw fleet rm acme --force

Также безвозвратно удалите данные ячейки:

bash
openclaw fleet rm acme --purge-data --force

Fleet удаляет контейнер ячейки до удаления выделенной для него мостовой сети. --purge-data требует --force. Перед рекурсивным удалением Fleet определяет оба корневых каталога, принадлежащих Fleet, и оба каталога конкретного арендатора. Каждая цель должна быть строго ожидаемым конечным каталогом арендатора внутри своего корневого каталога и не должна быть символьной ссылкой. Эти проверки вложенности предотвращают перенаправление удаления в другое место из-за повреждённого пути в реестре или межарендаторской символьной ссылки.

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

Хранилище и структура контейнеров

Для состояния ячейки и ключей шифрования профилей аутентификации используются отдельные пути хоста для каждого арендатора в активном каталоге состояния OpenClaw:

text
<state-dir>/fleet/cells/<tenant>/<state-dir>/fleet/auth-profile-secrets/<tenant>/

Первый каталог монтируется в /home/node/.openclaw. Второй монтируется в /home/node/.config/openclaw, что соответствует точке монтирования ключа шифрования в официальной конфигурации Docker. Поэтому ключ шифрования не доступен в обычной точке монтирования состояния и не включается, если резервируется или предоставляется общий доступ только к каталогу состояния ячейки. Оба каталога сохраняются при обычном удалении и обновлении; fleet rm --purge-data --force удаляет оба после отдельных проверок вложенности.

Перед первым запуском Fleet инициализирует конфигурацию ячейки с gateway.mode=local, аутентификацией по токену, привязкой контейнера к LAN и источниками Control UI для выделенного порта хоста. Значение токена не записывается в эту конфигурацию; оно остаётся в окружении контейнера.

Fleet закрепляет пути контейнера официального образа с помощью следующих значений окружения:

Переменная Значение в контейнере
HOME /home/node
OPENCLAW_HOME /home/node
OPENCLAW_STATE_DIR /home/node/.openclaw
OPENCLAW_CONFIG_PATH /home/node/.openclaw/openclaw.json
OPENCLAW_WORKSPACE_DIR /home/node/.openclaw/workspace
OPENCLAW_GATEWAY_TOKEN Сгенерированный или предоставленный токен ячейки

По умолчанию официальный образ использует непривилегированного пользователя node с UID 1000. Fleet сохраняет возможность записи в приватные точки монтирования 0700, не предоставляя к ним доступ всем пользователям. Rootful Docker запускает ячейку с UID и GID непривилегированного пользователя, вызвавшего команду; rootless Docker использует UID 0 контейнера, который в пространстве имён пользователей демона сопоставляется с непривилегированным пользователем хоста, вызвавшим команду. Podman использует keep-id с UID и GID пользователя, вызвавшего команду. Если сам Fleet запущен от имени root с rootful-средой выполнения, он сохраняет пользователя образа и назначает начальным файлам точек монтирования UID/GID 1000.

На хостах с SELinux точки монтирования Docker и Podman получают приватную перемаркировку :Z. При восстановлении или перемещении данных ячейки сохраняйте возможность записи в пути привязанных точек монтирования для фактического пользователя контейнера. Профиль совместим с непривилегированным режимом, однако Docker или Podman уже должны быть настроены на хосте для работы без прав root; Fleet не преобразует rootful-демон в rootless-демон.

Профиль безопасности

Fleet применяет к каждой ячейке следующий профиль:

Механизм защиты Применяемый профиль Назначение
Возможности Linux --cap-drop=ALL Gateway является процессом Node.js и не нуждается в дополнительных возможностях Linux.
Повышение привилегий --security-opt no-new-privileges Не позволяет процессам получать привилегии через двоичные файлы setuid или setgid.
Процесс инициализации --init Собирает завершившиеся дочерние процессы и передаёт сигналы жизненного цикла контейнера.
Ограничение процессов По умолчанию --pids-limit 512 Ограничивает создание дочерних процессов и исчерпание лимита процессов.
Ограничение памяти По умолчанию --memory 2g Ограничивает использование памяти ячейкой.
Ограничение ЦП По умолчанию --cpus 2 Ограничивает использование ЦП ячейкой.
Диск записываемого слоя Необязательный --disk Ограничивает слой контейнера, если серверная часть хранилища среды выполнения поддерживает квоты.
Политика перезапуска --restart unless-stopped Перезапускает ячейку после сбоя, не отменяя преднамеренную остановку.
Публикация на хосте Только 127.0.0.1:<host-port>:18789 Не допускает публикацию Gateway на интерфейсах хоста с подстановочным адресом.
Сеть ячейки Одна мостовая или внутренняя сеть Podman на ячейку Разделяет трафик по IP-адресам контейнеров и при необходимости блокирует исходящий трафик Podman.
Идентификатор контейнера Сопоставление пользователя с пользователем хоста Сохраняет возможность записи в приватные привязанные точки монтирования без предоставления общего доступа.
Постоянное состояние Отдельные точки монтирования ячеек; без общей точки монтирования состояния Хранит конфигурацию, учётные данные, сеансы и рабочие области арендатора в дереве данных этого арендатора.
Команда контейнера node dist/index.js gateway --bind lan --port 18789 Прослушивает сеть контейнера, чтобы сопоставленный только с обратной петлёй порт хоста мог получить к нему доступ.

Fleet никогда не монтирует /var/run/docker.sock, не использует --privileged или сеть хоста и не добавляет возможности. Отдельный мост для каждой ячейки является границей разделения ячеек, а не межсетевым экраном для исходящего трафика: ячейки сохраняют сетевой доступ, необходимый для провайдеров и каналов. Разместите перед портом обратной петли прокси-сервер, SSH-туннель или конфигурацию tailnet, соответствующую вашему развёртыванию. http://127.0.0.1:<port> доступен напрямую только с хоста Fleet.

Этот профиль разделяет контейнеры арендаторов, но не защищает арендаторов от оператора Fleet, администратора среды выполнения контейнеров или скомпрометированного хоста. Полную модель доверия и варианты более строгой изоляции см. в разделе Мультиарендаторный хостинг.

Работа с токенами

По умолчанию fleet create генерирует криптографически случайный 32-символьный шестнадцатеричный токен Gateway и однократно выводит его в результате создания. Сохраните его в одобренном диспетчере секретов и не допускайте записи результатов создания в журналы.

--gateway-token помещает пользовательский токен в аргументы локального процесса, которые могут сохраняться в истории оболочки или быть видны в списках процессов. Если существующему процессу управления секретами не требуется предоставленное значение, предпочитайте сгенерированный токен.

Токен и каждое значение, переданное с помощью --env, находятся в окружении контейнера. Fleet записывает их в кратковременный файл окружения с режимом 0600, передаёт Docker или Podman только путь к этому файлу и удаляет его после завершения команды среды выполнения. Значения, явно введённые в openclaw fleet create --gateway-token ... или --env KEY=VALUE, всё ещё могут быть видны в аргументах внешнего процесса openclaw и истории оболочки.

Значения окружения контейнера не скрыты от доверенного оператора хоста: администраторы Docker или Podman могут прочитать их при проверке контейнера. Указание Fleet «показывается один раз» относится к обычному выводу CLI, а не к защите от администратора хоста.

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

Was this useful?
On this page

On this page