openclaw fleet
openclaw fleet 管理稱為 cells 的完整 OpenClaw 執行個體。每個 cell 都有自己的閘道、狀態、認證資訊、頻道帳號、容器,以及僅限迴送介面的主機連接埠。每個租戶信任邊界應使用一個 cell;請勿將單一共用閘道用作惡意多租戶邊界。
Fleet 為實驗性功能。命令名稱、旗標、輸出格式及容器設定檔可能在不同版本間變更,且不提供棄用過渡期。
Fleet 支援 Docker 和 Podman。預設映像檔為 ghcr.io/openclaw/openclaw:latest。
Fleet 已在 Linux 和 macOS 主機上測試。目前尚未測試 Windows 主機。
快速開始
fleet create 會連同 cell URL 一次性顯示產生的閘道權杖。請立即儲存權杖,然後在每個租戶自己的 cell 內設定該租戶的頻道帳號。
租戶 ID
租戶 ID 必須符合:../acme 等路徑遊走字串均會遭到拒絕。
此 ID 會成為容器名稱的一部分:openclaw-cell-<tenant>。
fleet create
建立並啟動 cell:
--env 傳入租戶專屬的環境變數:
建立選項
自動配置會選取大於或等於
19100 的第一個未使用登錄連接埠。Fleet 會拒絕重複的租戶 ID,以及已指派給另一個 cell 的明確連接埠。
映像檔參照會作為單一容器執行階段引數傳入。空白參照及以 - 開頭的值會遭到拒絕,避免映像檔被解讀為 Docker 或 Podman 選項。
所選的 Docker 或 Podman 端點必須位於本機。Fleet 會在保留連接埠或建立本機狀態前,拒絕遠端 Docker context、DOCKER_HOST 端點及遠端 Podman 服務。不支援遠端 cell 主機。
當 Fleet 啟動新的 cell 時,create 會等待最多約一分鐘,直到其閘道回應 /healthz。若 cell 未恢復正常,Fleet 會保留其容器和登錄資料列,以供 fleet status、fleet logs 或明確移除使用。--no-start 會略過此健康狀態閘門。狀態異常之新 cell 所產生的閘道權杖不會遺失,而會保留在容器環境中(docker|podman inspect);此外,由於該 cell 尚未處理任何流量,因此先執行 fleet rm --force 再重新建立,永遠都是安全的替代方案。
使用摘要固定版本
create 和 upgrade 接受以摘要固定的映像檔參照,例如--image ghcr.io/openclaw/openclaw@sha256:<digest>。Fleet 會將映像檔參照原封不動地傳給 Docker 或 Podman,讓操作人員能將 cell 保持在不可變的映像檔位元組,而非隨標籤變動。
建立結果包括租戶 ID、容器名稱、主機連接埠、閘道權杖及本機 URL。即使採用 JSON 輸出,也應將結果視為含有機密資訊,因為其中包含權杖。
磁碟限制
--disk 僅限制容器可寫入層。透過繫結掛載的各租戶狀態與驗證目錄仍使用主機儲存空間;若這些目錄也需要硬性限制,請使用主機檔案系統的專案配額。
輸出流量政策
使用 Docker 時,請保留 bridge 模式,並使用
DOCKER-USER 鏈結等主機防火牆規則強制執行輸出政策。
fleet list
依租戶 ID 順序列出 cell:
Docker 或 Podman 無法使用時,登錄資料列仍然可見;只有即時狀態會變為
unknown。
fleet status
檢查一個 cell:
ok、failed 或 skipped。/healthz 證明閘道仍在運作,但不代表每個已設定的頻道或外掛均已完全就緒。沒有可供檢查的可用本機端點時,會略過探測。
fleet logs
將 cell 的容器日誌直接串流至終端機:
--follow,且不會將操作人員的停止動作視為命令失敗。日誌輸出會先經過遮蔽篩選器,將 cell 目前的閘道權杖替換為 <redacted>,之後才會有任何內容送達終端機。
fleet logs 沒有 --json 模式,因為容器日誌是原始 stdout/stderr 串流。若用於指令碼,請使用 --tail 限制輸出,並使用一般的 shell 重新導向或管線。
fleet start、fleet stop 與 fleet restart
使用已記錄的執行環境控制現有的單元:
fleet upgrade
重新拉取已記錄的映像,並取代單元容器:
--env 提供的值。掛載的狀態在容器替換後仍會保留;映像預設環境可能隨目標映像而變更。
只有在替代容器的閘道於單元的回送連接埠上回應 /healthz,符合官方 compose 檔案所使用的健康狀態合約後,才會提交替換。如果替代容器結束、陷入當機循環,或未能在約一分鐘內轉為健康狀態,系統會將其移除並還原先前的容器,因此損壞的映像不會導致運作中的單元停機。
閘道權杖刻意不儲存在 Fleet 登錄中。移除舊容器前,Fleet 會讀取其環境,並將 OPENCLAW_GATEWAY_TOKEN 帶入替代容器。如果權杖未存在於你控制的其他位置,請勿在升級前手動移除舊容器。
fleet backup 與 fleet restore
備份一個已停止的單元:
0600,且必須像認證資訊一樣妥善保存。備份會拒絕執行中的單元,以便一致地擷取 SQLite 狀態。除非提供 --force,否則還原會拒絕執行中的單元;還原只會取代該租戶的狀態、輪替閘道權杖,並僅顯示一次新權杖。Fleet 一次只會備份一個租戶;備份所有租戶是另一項獨立的操作員操作。
還原需要現有且已停止的容器,因為從該容器檢查到的執行環境設定檔會提供替代容器的限制、使用者對應、環境來源與映像。如果已註冊的容器遭到外部移除,請先執行不含 --purge-data 的 fleet rm <tenant> --force,使用預定的映像與 --no-start 重新建立單元,再重試還原。第一次移除會完整保留兩個租戶資料目錄。
兩個命令都接受 --max-bytes <bytes>,以限制封存或解壓縮的檔案資料;兩者也會套用相同的固定一百萬個封存路徑區段預算,因此僅含中繼資料的封存炸彈無法耗盡主機 inode,且每個接受的備份都能還原。備份接受 --out <path>,兩個命令都支援 --json。
封存檔只能包含一般檔案與目錄。備份絕不會跟隨或儲存符號連結、硬連結、通訊端或裝置節點;結果中會回報略過的數量。還原會拒絕包含任何其他項目類型的封存檔。工作區 node_modules 等可重新建立的符號連結樹狀結構,必須在還原後於單元內重新安裝。
fleet doctor
稽核所有單元或單一租戶,而不變更執行環境或檔案系統狀態:
fleet rm
從執行環境與登錄中移除已停止的單元,同時保留租戶資料:
--force:
--purge-data 需要 --force。在遞迴刪除之前,Fleet 會解析兩個由 Fleet 擁有的根目錄,以及兩個各租戶目錄。每個目標都必須是完全符合預期的租戶葉節點、嚴格位於其根目錄內,且不得為符號連結。這些包含範圍檢查可防止損壞的登錄路徑或跨租戶符號連結將刪除操作重新導向其他位置。
如果完全符合預期的租戶目錄已不存在,清除操作仍可重試。如此一來,後續叫用便能在部分檔案系統失敗後完成清理,而不會放寬對仍然存在之目錄的路徑檢查。
儲存空間與容器配置
單元狀態與驗證設定檔加密金鑰會使用作用中 OpenClaw 狀態目錄下不同的各租戶主機路徑:/home/node/.openclaw。第二個目錄掛載於 /home/node/.config/openclaw,與官方 Docker 設定的加密金鑰掛載方式一致。因此,加密金鑰不會暴露在一般狀態掛載之下,也不會在僅備份或共用單元狀態目錄時納入其中。兩個目錄在一般移除與升級後都會保留;fleet rm --purge-data --force 會在分別執行包含範圍檢查後刪除兩者。
首次啟動前,Fleet 會使用 gateway.mode=local、權杖驗證、LAN 容器繫結,以及分配之主機連接埠的 Control UI 來源來初始化單元設定。權杖值不會寫入該設定,而是保留在容器環境中。
Fleet 會使用以下環境值固定官方映像的容器路徑:
官方映像預設使用 UID 1000 的非 root
node 使用者。Fleet 會讓私有 0700 繫結掛載保持可寫入,而不使其可由所有人存取。有 root Docker 會使用叫用者的非 root UID 與 GID 執行單元;無 root Docker 則使用容器 UID 0,該 UID 會在常駐程式的使用者命名空間內對應至叫用者在主機上的非特權使用者。Podman 使用 keep-id 搭配叫用者的 UID 與 GID。當 Fleet 本身以 root 身分搭配有 root 執行環境執行時,會保留映像使用者,並將初始掛載檔案指派給 UID/GID 1000。
在 SELinux 主機上,Docker 與 Podman 掛載會套用私有 :Z 重新標記。如果還原或重新安置單元資料,請確保繫結掛載路徑可由有效的容器使用者寫入。此設定檔適合無 root 環境,但主機上的 Docker 或 Podman 必須已設定為無 root 作業;Fleet 不會將有 root 常駐程式轉換為無 root 常駐程式。
安全性設定檔
Fleet 會將以下設定檔套用至每個單元:
Fleet 絕不會掛載
/var/run/docker.sock、使用 --privileged 或主機網路,也不會新增權能。各單元橋接網路是跨單元隔離邊界,而不是對外輸出防火牆:單元仍保有供應商與頻道所需的網路輸出能力。請使用符合部署方式的 Proxy、SSH 通道或 tailnet 設定作為回送連接埠的前端。http://127.0.0.1:<port> 只能直接從 Fleet 主機連線。
此設定檔會隔離租戶容器,但無法保護租戶免受 Fleet 操作員、容器執行環境管理員或遭入侵主機的影響。如需完整的信任模型與更強的隔離選項,請參閱多租戶託管。
權杖處理
根據預設,fleet create 會產生一個密碼學安全的隨機 32 字元十六進位閘道權杖,並在建立結果中僅顯示一次。請將其儲存在核准的祕密管理工具中,並避免將建立輸出記錄至日誌。
--gateway-token 會將自訂權杖放入本機程序引數,這些引數可能保留在 Shell 歷程記錄中,或顯示於程序清單中。除非現有祕密管理工作流程需要提供指定值,否則請優先使用產生的權杖。
權杖以及透過 --env 傳遞的每個值都存在於容器環境中。Fleet 會將它們寫入短期存在、模式為 0600 的環境檔案,只將該檔案的路徑傳遞給 Docker 或 Podman,並在執行環境命令完成後移除檔案。明確輸入 openclaw fleet create --gateway-token ... 或 --env KEY=VALUE 的值,仍可能顯示於外層 openclaw 程序引數與 Shell 歷程記錄中。
容器環境值不會對受信任的主機操作員隱藏:Docker 或 Podman 管理員可以透過容器檢查讀取這些值。Fleet 的「僅顯示一次」註記描述的是一般命令列介面輸出,而不是防止主機管理員存取。