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 через loopback-порт ячейки согласно тому же контракту проверки работоспособности, который используется в официальном файле 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 создаёт резервную копию только одного арендатора за раз; резервное копирование всех арендаторов выполняется отдельным действием оператора.

Для восстановления требуется существующий остановленный контейнер, поскольку его проверенный профиль среды выполнения предоставляет ограничения, сопоставление пользователя, происхождение среды и образ для нового контейнера. Если зарегистрированный контейнер был удалён вне Fleet, сначала выполните fleet rm <tenant> --force без --purge-data, заново создайте ячейку с нужным образом и --no-start, а затем повторите восстановление. При первом удалении оба каталога данных арендатора сохраняются.

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

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

fleet doctor

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

bash
openclaw fleet doctoropenclaw fleet doctor acme --json

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

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, не делая их общедоступными. В Docker с правами root ячейка запускается с UID и GID вызвавшего её непривилегированного пользователя; Docker без прав root использует UID 0 контейнера, который в пространстве имён пользователей демона сопоставляется с вызвавшим процесс непривилегированным пользователем хоста. Podman использует keep-id с UID и GID вызывающего пользователя. Если сама Fleet запускается с правами root в среде выполнения с правами root, она сохраняет пользователя образа и назначает начальные файлы подключаемых каталогов UID/GID 1000.

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

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

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

Мера защиты Применяемый профиль Назначение
Возможности Linux --cap-drop=ALL Gateway является процессом Node.js и не требует дополнительных возможностей Linux.
Повышение привилегий --security-opt no-new-privileges Не позволяет процессам получать привилегии через двоичные файлы setuid или setgid.
Процесс инициализации --init Завершает дочерние процессы и перенаправляет сигналы жизненного цикла контейнера.
Ограничение процессов По умолчанию --pids-limit 512 Ограничивает исчерпание ресурсов из-за создания процессов и вызовов fork.
Ограничение памяти По умолчанию --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 Прослушивает сеть контейнера, чтобы сопоставленный только с loopback-интерфейсом порт хоста мог подключиться к нему.

Fleet никогда не подключает /var/run/docker.sock, не использует --privileged или сеть хоста и не добавляет возможности. Мостовая сеть отдельной ячейки служит границей разделения ячеек, а не межсетевым экраном для исходящего трафика: ячейки сохраняют сетевой доступ, необходимый для провайдеров и каналов. Разместите перед loopback-портом прокси, туннель 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