CLI commands

Vloot

openclaw fleet

openclaw fleet beheert volledige OpenClaw-instanties die cellen worden genoemd. Elke cel heeft een eigen Gateway, status, inloggegevens, kanaalaccounts, container en hostpoort die alleen via loopback bereikbaar is. Gebruik één cel per vertrouwensgrens van een tenant; gebruik niet één gedeelde Gateway als grens voor vijandige multitenancy.

Fleet is experimenteel. Opdrachtnamen, vlaggen, uitvoerstructuren en het containerprofiel kunnen zonder afschrijvingsperiode tussen releases veranderen.

Fleet ondersteunt Docker en Podman. De standaardimage is ghcr.io/openclaw/openclaw:latest.

Fleet is getest op Linux- en macOS-hosts. Windows-hosts zijn momenteel niet getest.

Snel aan de slag

bash
openclaw fleet create acmeopenclaw fleet status acmeopenclaw fleet list

fleet create toont het gegenereerde Gateway-token één keer, samen met de URL van de cel. Sla het token onmiddellijk op en configureer vervolgens de kanaalaccounts van elke tenant binnen de cel van die tenant.

Tenant-ID's

Tenant-ID's moeten overeenkomen met:

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

Dit staat 1 tot 40 kleine letters, cijfers en interne koppeltekens toe. Een ID moet met een letter of cijfer beginnen en eindigen. Hoofdletters, underscores, schuine strepen, punten, witruimte en traversaltekenreeksen zoals ../acme worden geweigerd.

De ID wordt onderdeel van de containernaam: openclaw-cell-<tenant>.

fleet create

Maak een cel en start deze:

bash
openclaw fleet create acme

Maak een Podman-cel op een vaste poort zonder deze te starten:

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

Geef tenantspecifieke omgevingsvariabelen door door --env te herhalen:

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

Omgevingssleutels gebruiken letters, cijfers en underscores en mogen niet met een cijfer beginnen. Waarden moeten uit één regel bestaan, omdat Fleet ze doorgeeft via een beveiligd omgevingsbestand voor de runtime. Fleet weigert pogingen om de beheerde variabelen voor containerpaden en Gateway-tokens te overschrijven die onder Opslag- en containerindeling worden vermeld.

Aanmaakopties

Optie Standaard Beschrijving
--image <ref> ghcr.io/openclaw/openclaw:latest Containerimage voor de cel.
--runtime <runtime> docker Container-CLI: docker of podman.
--port <number> Automatisch toegewezen vanaf 19100 Loopback-hostpoort. Een expliciet geselecteerde poort mag niet bij een andere geregistreerde cel horen.
--memory <value> 2g Geheugenlimiet van de container in Docker-/Podman-syntaxis.
--cpus <value> 2 CPU-limiet van de container.
--disk <size> Geen Beperk de beschrijfbare laag van de container wanneer de opslagbackend quota ondersteunt.
--network <mode> bridge Modus voor uitgaand netwerkverkeer: bridge of internal.
--pids-limit <number> 512 Maximumaantal processen in de container.
--env &lt;KEY=VALUE&gt; Geen Geef een omgevingsvariabele door aan de cel. Herhaal dit voor meerdere waarden.
--gateway-token <value> Willekeurig hexadecimaal token van 32 tekens Gebruik een opgegeven Gateway-token in plaats van er een te genereren. Zie Tokenverwerking.
--no-start Cel wordt gestart Maak de container zonder deze te starten.
--json Voor mensen leesbare uitvoer Toon machineleesbare uitvoer.

Automatische toewijzing selecteert de eerste ongebruikte registerpoort op of boven 19100. Fleet weigert dubbele tenant-ID's en expliciete poorten die al aan een andere cel zijn toegewezen.

Imageverwijzingen worden als één argument aan de containerruntime doorgegeven. Lege verwijzingen en waarden die beginnen met - worden geweigerd, zodat een image niet als Docker- of Podman-optie kan worden geïnterpreteerd.

Het geselecteerde Docker- of Podman-eindpunt moet lokaal zijn. Fleet weigert externe Docker-contexten, DOCKER_HOST-eindpunten en externe Podman-services voordat een poort wordt gereserveerd of lokale status wordt aangemaakt. Externe celhosts worden niet ondersteund.

Wanneer Fleet een nieuwe cel start, wacht de aanmaakopdracht maximaal ongeveer een minuut totdat de Gateway reageert op /healthz. Als de cel niet gezond wordt, laat Fleet de container en registerrij intact voor fleet status, fleet logs of expliciete verwijdering. --no-start slaat deze gezondheidscontrole over. Het gegenereerde Gateway-token van een ongezonde nieuwe cel gaat niet verloren: het blijft aanwezig in de containeromgeving (docker|podman inspect). Omdat de cel nog geen verkeer heeft verwerkt, is fleet rm --force gevolgd door een nieuwe aanmaakopdracht altijd een veilig alternatief.

Vastzetten op digest

Aanmaak en upgrade accepteren op digest vastgezette imageverwijzingen zoals --image ghcr.io/openclaw/openclaw@sha256:<digest>. Fleet geeft de imageverwijzing ongewijzigd door aan Docker of Podman, zodat een beheerder een cel op onveranderlijke imagebytes kan houden in plaats van op een veranderlijke tag.

Het aanmaakresultaat bevat de tenant-ID, containernaam, hostpoort, het Gateway-token en de lokale URL. Behandel het resultaat ook bij JSON-uitvoer als geheimhoudingsgevoelig, omdat het het token bevat.

Schijflimieten

--disk beperkt alleen de beschrijfbare laag van de container. De per tenant bind-gemounte status- en auth-mappen blijven hostopslag; gebruik projectquota van het hostbestandssysteem wanneer ook voor die mappen een harde limiet nodig is.

Runtime/opslagbackend Ondersteuning voor --disk
Docker overlay2 op XFS Vereist de XFS-mountoptie pquota.
Docker btrfs of zfs Wordt ondersteund door het opslagstuurprogramma.
Podman overlay Vereist XFS als onderliggende opslag.
Andere backends Het aanmaken van de container mislukt met de daemonfout en backendinstructies van Fleet.

Beleid voor uitgaand verkeer

Modus Docker Podman
bridge Ondersteund; uitgaand verkeer is standaard onbeperkt. Ondersteund; uitgaand verkeer is standaard onbeperkt.
internal Geweigerd omdat Docker de gepubliceerde loopback-Gateway-poort niet behoudt op een intern netwerk. Ondersteund; de loopback-Gateway blijft gepubliceerd terwijl uitgaand verkeer wordt geblokkeerd.

Behoud voor Docker de bridge-modus en dwing het beleid voor uitgaand verkeer af met firewallregels op de host, zoals de DOCKER-USER-keten.

fleet list

Toon cellen in volgorde van tenant-ID:

bash
openclaw fleet listopenclaw fleet lsopenclaw fleet list --json

De tabel bevat:

Kolom Betekenis
tenant Tenant-ID.
state Actuele containerstatus uit inspectie door Docker of Podman. unknown betekent dat de runtime niet beschikbaar was, of dat er een container met de celnaam bestaat waarvan de Fleet-eigendomslabels niet overeenkomen met de registervermelding (een signaal van een botsing of manipulatie — inspecteer deze handmatig voordat je actie onderneemt).
port Loopback-hostpoort die aan de Gateway van de cel is gekoppeld.
image Geregistreerde containerimage.
created Aanmaaktijd van de cel.

Registerrijen blijven zichtbaar wanneer Docker of Podman niet beschikbaar is; alleen de actuele status wordt unknown.

fleet status

Inspecteer één cel:

bash
openclaw fleet status acmeopenclaw fleet status acme --json

De status combineert de registerrij van Fleet, actuele containerinspectie en een kort verzoek op basis van beste inspanning aan:

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

Het gezondheidsresultaat is ok, failed of skipped. /healthz bewijst dat de Gateway actief is, niet dat elk geconfigureerd kanaal of elke Plugin volledig gereed is. De controle wordt overgeslagen wanneer er geen bruikbaar lokaal eindpunt is om te controleren.

fleet logs

Stream de containerlogboeken van een cel rechtstreeks naar de terminal:

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

Fleet verifieert de eigendomslabels van de geregistreerde container voordat logboeken worden gelezen en weigert daarom een vreemde container die de verwachte celnaam gebruikt. De stream wordt vastgezet op de ID van die geïnspecteerde container, zodat een gelijktijdige vervanging de stream niet naar een nieuwere generatie kan omleiden. Druk op Ctrl-C om --follow te beëindigen zonder dat de stopactie van de beheerder als opdrachtfout wordt behandeld. De loguitvoer wordt door een redactiefilter geleid dat het huidige Gateway-token van de cel vervangt door <redacted> voordat iets de terminal bereikt.

fleet logs heeft geen --json-modus, omdat containerlogboeken een onbewerkte stdout-/stderr-stream zijn. Begrens voor scripts de uitvoer met --tail en gebruik normale shellomleiding of pijplijnen.

fleet start, fleet stop en fleet restart

Beheer een bestaande cel met de vastgelegde runtime:

bash
openclaw fleet start acmeopenclaw fleet stop acmeopenclaw fleet restart acme

Deze opdrachten werken met de geregistreerde containernaam. Ze mislukken als de tenant onbekend is of de vastgelegde runtime de bewerking niet kan uitvoeren.

fleet upgrade

Haal de vastgelegde image opnieuw op en vervang de celcontainer:

bash
openclaw fleet upgrade acme

Verplaats de cel naar een andere image:

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

Bij een upgrade wordt de doelimage opgehaald, worden de bestaande container en het netwerk per cel geïnspecteerd, wordt de container gestopt en verwijderd en vervolgens opnieuw aangemaakt en gestart. De vervanging behoudt dezelfde hostpoort, gegevensmappen, hetzelfde bridgenetwerk per cel, runtimeprofiel, resourcelimieten, herstartbeleid, door Fleet beheerde omgeving en waarden die oorspronkelijk met --env zijn opgegeven. Gekoppelde status blijft behouden wanneer de container wordt vervangen; de standaardomgeving van de image kan met de doelimage veranderen.

De vervanging wordt pas definitief gemaakt nadat de Gateway op de loopbackpoort van de cel antwoordt op /healthz, overeenkomstig het gezondheidscontract dat het officiële Compose-bestand gebruikt. Een vervanging die wordt afgesloten, in een crashlus terechtkomt of niet binnen ongeveer een minuut gezond wordt, wordt verwijderd en de vorige container wordt hersteld, zodat een defecte image een werkende cel niet uitschakelt.

Het Gateway-token wordt bewust niet in het Fleet-register opgeslagen. Voordat Fleet de oude container verwijdert, leest het de omgeving ervan en neemt het OPENCLAW_GATEWAY_TOKEN mee naar de vervanging. Verwijder de oude container vóór een upgrade niet handmatig als het token nergens anders onder jouw beheer bestaat.

fleet backup en fleet restore

Maak een back-up van één gestopte cel:

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

Herstel dat archief naar de geregistreerde cel:

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

Dit zijn opdrachten met hostoperatorrechten. Archieven bevatten tenantstatus en authenticatiegeheimen, worden aangemaakt met modus 0600 en moeten als inloggegevens worden opgeslagen. Back-up weigert een actieve cel, zodat de SQLite-status consistent wordt vastgelegd. Herstel weigert een actieve cel tenzij --force is opgegeven, vervangt alleen de status van die tenant, roteert het Gateway-token en toont het nieuwe token één keer. Fleet maakt telkens een back-up van één tenant; een back-up van alle tenants is een afzonderlijke operatoractie.

Voor herstel is een bestaande gestopte container nodig, omdat het geïnspecteerde runtimeprofiel daarvan de vervangende limieten, gebruikerstoewijzing, herkomst van de omgeving en image levert. Als de geregistreerde container buiten Fleet om is verwijderd, voer dan eerst fleet rm <tenant> --force uit zonder --purge-data, maak de cel opnieuw aan met de beoogde image en --no-start en probeer het herstel vervolgens opnieuw. Bij de eerste verwijdering blijven beide gegevensmappen van de tenant intact.

Beide opdrachten accepteren --max-bytes <bytes> om de hoeveelheid gearchiveerde of uitgepakte bestandsgegevens te begrenzen, en beide hanteren hetzelfde vaste budget van één miljoen archiefpadsegmenten, zodat archiefbommen die alleen metadata bevatten de inodes van de host niet kunnen uitputten en elke geaccepteerde back-up herstelbaar blijft. Back-up accepteert --out <path> en beide opdrachten ondersteunen --json.

Archieven bevatten uitsluitend gewone bestanden en mappen. Back-up volgt of bewaart nooit symbolische koppelingen, harde koppelingen, sockets of apparaatknooppunten; aantallen overgeslagen items worden in het resultaat vermeld. Herstel weigert archieven die enig ander type item bevatten. Opnieuw aan te maken bomen met symbolische koppelingen, zoals node_modules van de werkruimte, moeten na een herstel opnieuw in de cel worden geïnstalleerd.

fleet doctor

Controleer elke cel of één tenant zonder de runtime- of bestandssysteemstatus te wijzigen:

bash
openclaw fleet doctoropenclaw fleet doctor acme --json

Doctor controleert de lokaliteit van de runtime, eigendomslabels, gezondheid, beveiliging, resourcelimieten, binding van de loopbackpoort, aanwezigheid van het token, netwerkeigendom en de uitgaande-verbindingsmodus, en de machtigingen van privémappen voor status. Waarschuwingen beschrijven gestopte cellen of verschillen in eigendom; elke mislukte bevinding stelt een niet-nul afsluitcode voor het proces in.

fleet rm

Verwijder een gestopte cel uit de runtime en het register, maar behoud de tenantgegevens:

bash
openclaw fleet rm acme

Voor een actieve container is --force vereist:

bash
openclaw fleet rm acme --force

Verwijder ook de celgegevens permanent:

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

Fleet verwijdert de celcontainer voordat het bijbehorende bridgenetwerk wordt verwijderd. --purge-data vereist --force. Voor recursieve verwijdering bepaalt Fleet zowel de twee hoofdmappen die eigendom zijn van Fleet als de twee mappen per tenant. Elk doel moet exact de verwachte tenantondermap zijn, strikt binnen de hoofdmap liggen en geen symbolische koppeling zijn. Deze insluitingscontroles voorkomen dat een beschadigd registerpad of een symbolische koppeling tussen tenants de verwijdering naar een andere locatie omleidt.

Opschonen kan opnieuw worden geprobeerd wanneer een exact verwachte tenantmap al ontbreekt. Zo kan een latere aanroep de opschoning na een gedeeltelijke bestandssysteemfout voltooien zonder de padcontroles voor nog bestaande mappen te versoepelen.

Opslag- en containerindeling

De celstatus en encryptiesleutels voor authenticatieprofielen gebruiken afzonderlijke hostpaden per tenant onder de actieve statusmap van OpenClaw:

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

De eerste map wordt gekoppeld aan /home/node/.openclaw. De tweede wordt gekoppeld aan /home/node/.config/openclaw, overeenkomstig de koppeling voor encryptiesleutels van de officiële Docker-configuratie. De encryptiesleutel wordt daardoor niet blootgesteld onder de gewone statuskoppeling en niet opgenomen wanneer alleen een back-up van de celstatusmap wordt gemaakt of deze wordt gedeeld. Beide mappen blijven behouden bij normale verwijdering en upgrades; fleet rm --purge-data --force verwijdert beide na afzonderlijke insluitingscontroles.

Vóór de eerste start initialiseert Fleet de celconfiguratie met gateway.mode=local, tokenauthenticatie, de LAN-containerbinding en Control UI-oorsprongen voor de toegewezen hostpoort. De tokenwaarde wordt niet naar die configuratie geschreven; deze blijft in de containeromgeving.

Fleet zet de containerpaden van de officiële image vast met deze omgevingswaarden:

Variabele Containerwaarde
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 Gegenereerd of opgegeven celtoken

De officiële image gebruikt standaard de niet-rootgebruiker node met UID 1000. Fleet houdt de persoonlijke 0700-bind-mounts beschrijfbaar zonder ze voor iedereen toegankelijk te maken. Rootful Docker voert de cel uit met de UID en GID van de niet-rootgebruiker die de opdracht aanroept; rootless Docker gebruikt container-UID 0, die binnen de gebruikersnaamruimte van de daemon wordt toegewezen aan de niet-geprivilegieerde hostgebruiker die de opdracht aanroept. Podman gebruikt keep-id met de aanroepende UID en GID. Wanneer Fleet zelf als root wordt uitgevoerd met een rootful runtime, behoudt het de imagegebruiker en wijst het de oorspronkelijke mountbestanden toe aan UID/GID 1000.

Op SELinux-hosts krijgen Docker- en Podman-mounts een privé-herlabeling met :Z. Als je celgegevens herstelt of verplaatst, houd je de bind-mountpaden beschrijfbaar voor de effectieve containergebruiker. Het profiel is geschikt voor rootless gebruik, maar Docker of Podman moet al voor rootless gebruik op de host zijn geconfigureerd; Fleet zet een rootful daemon niet om in een rootless daemon.

Beveiligingsprofiel

Fleet past het volgende profiel toe op elke cel:

Maatregel Toegepast profiel Reden
Linux-capabilities --cap-drop=ALL De Gateway is een Node.js-proces en heeft geen aanvullende Linux-capabilities nodig.
Privilege-escalatie --security-opt no-new-privileges Voorkomt dat processen bevoegdheden verkrijgen via setuid- of setgid-programma's.
Init-proces --init Ruimt onderliggende processen op en stuurt levenscyclussignalen van de container door.
Proceslimiet Standaard --pids-limit 512 Begrensd uitputting door forks en processen.
Geheugenlimiet Standaard --memory 2g Begrensd het geheugengebruik van de cel.
CPU-limiet Standaard --cpus 2 Begrensd het CPU-gebruik van de cel.
Schijf voor beschrijfbare laag Optioneel --disk Begrensd de containerlaag wanneer de opslagbackend van de runtime quota ondersteunt.
Herstartbeleid --restart unless-stopped Herstart een mislukte cel zonder een opzettelijke stop te negeren.
Publicatie op host Alleen 127.0.0.1:<host-port>:18789 Houdt de Gateway weg van wildcard-hostinterfaces.
Celnetwerk Eén bridge- of intern Podman-netwerk per cel Scheidt container-IP-verkeer en blokkeert optioneel uitgaand Podman-verkeer.
Containeridentiteit Aan de host aangepaste gebruikerstoewijzing Houdt persoonlijke bind-mounts beschrijfbaar zonder iedereen toegang te geven.
Persistente status Mounts per cel; geen gedeelde statusmount Houdt de configuratie, inloggegevens, sessies en werkruimten van een tenant in de gegevensstructuur van die tenant.
Containeropdracht node dist/index.js gateway --bind lan --port 18789 Luistert op het containernetwerk, zodat de alleen-loopback-hostpoorttoewijzing de container kan bereiken.

Fleet koppelt nooit /var/run/docker.sock, gebruikt nooit --privileged of hostnetwerken en voegt geen capabilities toe. De bridge per cel is een scheidingsgrens tussen cellen, geen uitgaande firewall: cellen behouden de netwerkuitgang die nodig is voor providers en kanalen. Plaats vóór de loopbackpoort een proxy, SSH-tunnel of tailnetconfiguratie die bij je implementatie past. http://127.0.0.1:<port> is alleen rechtstreeks bereikbaar vanaf de Fleet-host.

Dit profiel scheidt tenantcontainers, maar beschermt tenants niet tegen de Fleet-operator, de beheerder van de containerruntime of een gecompromitteerde host. Zie Hosting voor meerdere tenants voor het volledige vertrouwensmodel en krachtigere isolatieopties.

Tokenverwerking

Standaard genereert fleet create een cryptografisch willekeurig hexadecimaal Gateway-token van 32 tekens en toont het één keer in het aanmaakresultaat. Bewaar het in je goedgekeurde geheimenbeheerder en voorkom dat de uitvoer van de aanmaakopdracht in logboeken wordt vastgelegd.

--gateway-token plaatst een aangepast token in de argumenten van het lokale proces, die in de shellgeschiedenis kunnen worden bewaard of in proceslijsten zichtbaar kunnen zijn. Geef de voorkeur aan het gegenereerde token, tenzij een bestaande workflow voor geheimenbeheer een opgegeven waarde vereist.

Het token en elke waarde die met --env wordt doorgegeven, bevinden zich in de containeromgeving. Fleet schrijft ze naar een kortstondig omgevingsbestand met modus 0600, geeft alleen het pad van dat bestand door aan Docker of Podman en verwijdert het nadat de runtimeopdracht is voltooid. Waarden die expliciet in openclaw fleet create --gateway-token ... of --env KEY=VALUE worden getypt, kunnen nog steeds zichtbaar zijn in de argumenten van het buitenste openclaw-proces en in de shellgeschiedenis.

Containeromgevingswaarden zijn niet verborgen voor de vertrouwde hostbeheerder: Docker- of Podman-beheerders kunnen ze uitlezen via containerinspectie. De opmerking van Fleet dat ze „eenmalig worden weergegeven” beschrijft de normale CLI-uitvoer, niet de bescherming tegen een hostbeheerder.

Gerelateerd

Was this useful?
On this page

On this page