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 обмежує лише доступний для запису шар контейнера. Підключені через bind mount каталоги стану й автентифікації кожного орендаря залишаються сховищем хоста; якщо для цих каталогів також потрібне жорстке обмеження, використовуйте проєктні квоти файлової системи хоста.

Середовище виконання/серверна частина сховища Підтримка --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 завантажує цільовий образ, перевіряє наявний контейнер і мережу окремої комірки, зупиняє та видаляє контейнер, а потім повторно створює і запускає його. Замінений контейнер зберігає той самий порт хоста, каталоги даних, мостову мережу окремої комірки, профіль середовища виконання, обмеження ресурсів, політику перезапуску, кероване 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> для обмеження обсягу архівованих або видобутих файлових даних і застосовують однаковий фіксований ліміт у мільйон сегментів шляхів архіву, щоб архівні бомби, які містять лише метадані, не могли вичерпати inode хоста, а кожна прийнята резервна копія залишалася придатною до відновлення. Команда резервного копіювання приймає --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 уже має бути налаштовано для роботи без прав root на хості; Fleet не перетворює демон із правами root на демон без прав root.

Профіль безпеки

Fleet застосовує до кожної комірки такий профіль:

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