Containers
Podman
OpenClaw Gateway को rootless Podman कंटेनर में चलाएं, जिसे आपका मौजूदा गैर-root उपयोगकर्ता प्रबंधित करता है।
अभिप्रेत मॉडल है:
- Podman gateway कंटेनर चलाता है।
- आपका होस्ट
openclawCLI control plane है। - स्थायी स्थिति डिफ़ॉल्ट रूप से होस्ट पर
~/.openclawके अंतर्गत रहती है। - दैनिक प्रबंधन
sudo -u openclaw,podman exec, या अलग service user के बजायopenclaw --container <name> ...का उपयोग करता है।
पूर्वापेक्षाएं
- rootless मोड में Podman
- होस्ट पर स्थापित OpenClaw CLI
- वैकल्पिक: यदि आप Quadlet-प्रबंधित auto-start चाहते हैं, तो
systemd --user - वैकल्पिक:
sudoकेवल तब, जब आप headless होस्ट पर boot persistence के लिएloginctl enable-linger "$(whoami)"चाहते हैं
त्वरित शुरुआत
एक-बार सेटअप
repo root से, ./scripts/podman/setup.sh चलाएं।
Gateway कंटेनर शुरू करें
कंटेनर को ./scripts/run-openclaw-podman.sh launch से शुरू करें।
कंटेनर के अंदर onboarding चलाएं
./scripts/run-openclaw-podman.sh launch setup चलाएं, फिर http://127.0.0.1:18789/ खोलें।
होस्ट CLI से चल रहे कंटेनर को प्रबंधित करें
OPENCLAW_CONTAINER=openclaw सेट करें, फिर होस्ट से सामान्य openclaw कमांड का उपयोग करें।
सेटअप विवरण:
./scripts/podman/setup.shडिफ़ॉल्ट रूप से आपके rootless Podman store मेंopenclaw:localबनाता है, या यदि आपनेOPENCLAW_IMAGE/OPENCLAW_PODMAN_IMAGEसेट किया है तो उसका उपयोग करता है।- यदि अनुपस्थित हो, तो यह
gateway.mode: "local"के साथ~/.openclaw/openclaw.jsonबनाता है। - यदि अनुपस्थित हो, तो यह
OPENCLAW_GATEWAY_TOKENके साथ~/.openclaw/.envबनाता है। - manual launches के लिए, helper
~/.openclaw/.envसे केवल Podman-संबंधित keys की छोटी allowlist पढ़ता है और कंटेनर को स्पष्ट runtime env vars पास करता है; यह पूरी env file Podman को नहीं देता।
Quadlet-प्रबंधित सेटअप:
./scripts/podman/setup.sh --quadletQuadlet केवल Linux विकल्प है क्योंकि यह systemd user services पर निर्भर करता है।
आप OPENCLAW_PODMAN_QUADLET=1 भी सेट कर सकते हैं।
वैकल्पिक build/setup env vars:
OPENCLAW_IMAGEयाOPENCLAW_PODMAN_IMAGE--openclaw:localबनाने के बजाय किसी मौजूदा/pulled image का उपयोग करेंOPENCLAW_IMAGE_APT_PACKAGES-- image build के दौरान अतिरिक्त apt packages install करें (legacyOPENCLAW_DOCKER_APT_PACKAGESभी स्वीकार करता है)OPENCLAW_IMAGE_PIP_PACKAGES-- image build के दौरान अतिरिक्त Python packages install करें; versions pin करें और केवल उन package indexes का उपयोग करें जिन पर आप भरोसा करते हैंOPENCLAW_EXTENSIONS-- build time पर Plugin dependencies पहले से install करेंOPENCLAW_INSTALL_BROWSER-- browser automation के लिए Chromium और Xvfb पहले से install करें (enable करने के लिए1पर सेट करें)
कंटेनर start:
./scripts/run-openclaw-podman.sh launchscript कंटेनर को आपके मौजूदा uid/gid के रूप में --userns=keep-id के साथ शुरू करता है और आपके OpenClaw state को कंटेनर में bind-mount करता है।
Onboarding:
./scripts/run-openclaw-podman.sh launch setupफिर http://127.0.0.1:18789/ खोलें और ~/.openclaw/.env से token का उपयोग करें।
Podman में model auth:
- setup के दौरान OpenClaw-प्रबंधित auth का उपयोग करें: Anthropic के लिए Anthropic API keys, या Codex-backed OpenAI के लिए OpenAI Codex browser OAuth/device-code auth।
- Podman launcher setup या gateway कंटेनर में host CLI credential homes जैसे
~/.claudeया~/.codexmount नहीं करता। - मौजूदा host CLI logins same-host सुविधा paths हैं। container installs के लिए, provider auth को mounted
~/.openclawstate में रखें जिसे setup प्रबंधित करता है।
होस्ट CLI default:
export OPENCLAW_CONTAINER=openclawफिर इन जैसे commands अपने आप उस कंटेनर के अंदर चलेंगे:
openclaw dashboard --no-openopenclaw gateway status --deep # includes extra service scanopenclaw doctoropenclaw channels loginmacOS पर, Podman machine browser को gateway के लिए non-local दिखा सकती है। यदि launch के बाद Control UI device-auth errors रिपोर्ट करता है, तो Podman और Tailscale में Tailscale guidance का उपयोग करें।
Podman और Tailscale
HTTPS या remote browser access के लिए, मुख्य Tailscale docs का पालन करें।
Podman-specific note:
- Podman publish host को
127.0.0.1पर रखें। openclaw gateway --tailscale serveके बजाय host-managedtailscale serveको प्राथमिकता दें।- macOS पर, यदि local browser device-auth context भरोसेमंद नहीं है, तो ad hoc local tunnel workarounds के बजाय Tailscale access का उपयोग करें।
देखें:
Systemd (Quadlet, वैकल्पिक)
यदि आपने ./scripts/podman/setup.sh --quadlet चलाया है, तो setup यहां Quadlet file install करता है:
~/.config/containers/systemd/openclaw.containerउपयोगी commands:
- Start:
systemctl --user start openclaw.service - Stop:
systemctl --user stop openclaw.service - Status:
systemctl --user status openclaw.service - Logs:
journalctl --user -u openclaw.service -f
Quadlet file edit करने के बाद:
systemctl --user daemon-reloadsystemctl --user restart openclaw.serviceSSH/headless hosts पर boot persistence के लिए, अपने मौजूदा user के लिए lingering enable करें:
sudo loginctl enable-linger "$(whoami)"Config, env, और storage
- Config dir:
~/.openclaw - Workspace dir:
~/.openclaw/workspace - Token file:
~/.openclaw/.env - Launch helper:
./scripts/run-openclaw-podman.sh
launch script और Quadlet host state को कंटेनर में bind-mount करते हैं:
OPENCLAW_CONFIG_DIR->/home/node/.openclawOPENCLAW_WORKSPACE_DIR->/home/node/.openclaw/workspace
डिफ़ॉल्ट रूप से ये host directories हैं, anonymous container state नहीं, इसलिए
openclaw.json, per-agent auth-profiles.json, channel/provider state,
sessions, और workspace container replacement के बाद भी बने रहते हैं।
Podman setup प्रकाशित gateway port पर 127.0.0.1 और localhost के लिए gateway.controlUi.allowedOrigins भी seed करता है, ताकि local dashboard कंटेनर के non-loopback bind के साथ काम करे।
manual launcher के लिए उपयोगी env vars:
OPENCLAW_PODMAN_CONTAINER-- container name (डिफ़ॉल्ट रूप सेopenclaw)OPENCLAW_PODMAN_IMAGE/OPENCLAW_IMAGE-- चलाने के लिए imageOPENCLAW_PODMAN_GATEWAY_HOST_PORT-- container18789पर mapped host portOPENCLAW_PODMAN_BRIDGE_HOST_PORT-- container18790पर mapped host portOPENCLAW_PODMAN_PUBLISH_HOST-- published ports के लिए host interface; default127.0.0.1हैOPENCLAW_GATEWAY_BIND-- कंटेनर के अंदर gateway bind mode; defaultlanहैOPENCLAW_PODMAN_USERNS--keep-id(default),auto, याhost
manual launcher container/image defaults final करने से पहले ~/.openclaw/.env पढ़ता है, इसलिए आप इन्हें वहां persist कर सकते हैं।
यदि आप non-default OPENCLAW_CONFIG_DIR या OPENCLAW_WORKSPACE_DIR का उपयोग करते हैं, तो ./scripts/podman/setup.sh और बाद के ./scripts/run-openclaw-podman.sh launch commands दोनों के लिए वही variables सेट करें। repo-local launcher shells के बीच custom path overrides persist नहीं करता।
Quadlet note:
- generated Quadlet service जानबूझकर fixed, hardened default shape रखती है:
127.0.0.1published ports, कंटेनर के अंदर--bind lan, औरkeep-iduser namespace। - यह
OPENCLAW_NO_RESPAWN=1,Restart=on-failure, औरTimeoutStartSec=300pin करता है। - यह
127.0.0.1:18789:18789(gateway) और127.0.0.1:18790:18790(bridge) दोनों publish करता है। - यह
OPENCLAW_GATEWAY_TOKENजैसी values के लिए runtimeEnvironmentFileके रूप में~/.openclaw/.envपढ़ता है, लेकिन manual launcher की Podman-specific override allowlist consume नहीं करता। - यदि आपको custom publish ports, publish host, या अन्य container-run flags चाहिए, तो manual launcher का उपयोग करें या
~/.config/containers/systemd/openclaw.containerको सीधे edit करें, फिर service reload और restart करें।
उपयोगी commands
- Container logs:
podman logs -f openclaw - Stop container:
podman stop openclaw - Remove container:
podman rm -f openclaw - Host CLI से dashboard URL खोलें:
openclaw dashboard --no-open - Host CLI के माध्यम से Health/status:
openclaw gateway status --deep(RPC probe + अतिरिक्त service scan)
Troubleshooting
- config या workspace पर Permission denied (EACCES): कंटेनर डिफ़ॉल्ट रूप से
--userns=keep-idऔर--user <your uid>:<your gid>के साथ चलता है। सुनिश्चित करें कि host config/workspace paths आपके मौजूदा user के owned हों। - Gateway start blocked (missing
gateway.mode=local): सुनिश्चित करें कि~/.openclaw/openclaw.jsonमौजूद है औरgateway.mode="local"सेट करता है। यदि missing हो, तोscripts/podman/setup.shइसे बनाता है। - Container CLI commands गलत target पर जाते हैं: स्पष्ट रूप से
openclaw --container <name> ...का उपयोग करें, या अपने shell मेंOPENCLAW_CONTAINER=<name>export करें। openclaw update--containerके साथ fail होता है: अपेक्षित है। image rebuild/pull करें, फिर container या Quadlet service restart करें।- Quadlet service शुरू नहीं होती:
systemctl --user daemon-reloadचलाएं, फिरsystemctl --user start openclaw.service। headless systems पर आपकोsudo loginctl enable-linger "$(whoami)"भी चाहिए हो सकता है। - SELinux bind mounts block करता है: default mount behavior को वैसा ही रहने दें; launcher Linux पर SELinux enforcing या permissive होने पर auto-adds
:Zकरता है।