Containers
Podman
เรียกใช้ OpenClaw Gateway ในคอนเทนเนอร์ Podman แบบไม่ใช้สิทธิ์ root ซึ่งจัดการโดยผู้ใช้ปัจจุบันที่ไม่ใช่ root ของคุณ
รูปแบบการทำงาน:
- Podman เรียกใช้คอนเทนเนอร์ Gateway
- CLI
openclawบนโฮสต์ของคุณทำหน้าที่เป็นระนาบควบคุม - โดยค่าเริ่มต้น สถานะถาวรจะอยู่บนโฮสต์ภายใต้
~/.openclaw - การจัดการในแต่ละวันใช้
openclaw --container <name> ...แทนsudo -u openclaw,podman execหรือผู้ใช้บริการแยกต่างหาก
ข้อกำหนดเบื้องต้น
- Podman ในโหมดไม่ใช้สิทธิ์ root
- ติดตั้ง OpenClaw CLI บนโฮสต์แล้ว
- ไม่บังคับ:
systemd --userหากต้องการให้ Quadlet จัดการการเริ่มทำงานอัตโนมัติ - ไม่บังคับ:
sudoเฉพาะเมื่อต้องการใช้loginctl enable-linger "$(whoami)"เพื่อให้ทำงานต่อเนื่องหลังบูตบนโฮสต์แบบไม่มีหน้าจอ
เริ่มต้นอย่างรวดเร็ว
ตั้งค่าครั้งเดียว
จากรากของรีโพซิทอรี ให้เรียกใช้ ./scripts/podman/setup.sh
คำสั่งนี้จะสร้าง openclaw:local ในที่เก็บ Podman แบบไม่ใช้สิทธิ์ root ของคุณ (หรือดึง OPENCLAW_IMAGE / OPENCLAW_PODMAN_IMAGE หากกำหนดไว้) สร้าง ~/.openclaw/openclaw.json พร้อม gateway.mode: "local" หากยังไม่มี และสร้าง ~/.openclaw/.env พร้อม OPENCLAW_GATEWAY_TOKEN ที่สร้างขึ้นใหม่หากยังไม่มี
ตัวแปรสภาพแวดล้อมขณะบิลด์ที่ไม่บังคับ:
| ตัวแปร | ผลลัพธ์ |
|---|---|
OPENCLAW_IMAGE / OPENCLAW_PODMAN_IMAGE |
ใช้อิมเมจที่มีอยู่หรือดึงมาแทนการบิลด์ openclaw:local |
OPENCLAW_IMAGE_APT_PACKAGES |
ติดตั้งแพ็กเกจ apt เพิ่มเติมระหว่างการบิลด์อิมเมจ (รองรับ OPENCLAW_DOCKER_APT_PACKAGES แบบเดิมด้วย) |
OPENCLAW_IMAGE_PIP_PACKAGES |
ติดตั้งแพ็กเกจ Python เพิ่มเติมระหว่างการบิลด์อิมเมจ โดยให้ตรึงเวอร์ชันและใช้เฉพาะดัชนีแพ็กเกจที่คุณเชื่อถือ |
OPENCLAW_EXTENSIONS |
คอมไพล์/จัดแพ็กเกจ Plugin ที่รองรับและเลือกไว้ พร้อมติดตั้งการขึ้นต่อกันสำหรับรันไทม์ |
OPENCLAW_INSTALL_BROWSER |
ติดตั้ง Chromium และ Xvfb ล่วงหน้าสำหรับระบบอัตโนมัติบนเบราว์เซอร์ (กำหนดเป็น 1) |
หากต้องการใช้การตั้งค่าที่จัดการโดย Quadlet แทน (เฉพาะ Linux + บริการผู้ใช้ systemd):
./scripts/podman/setup.sh --quadletหรือกำหนด OPENCLAW_PODMAN_QUADLET=1
เริ่มคอนเทนเนอร์ Gateway
./scripts/run-openclaw-podman.sh launchเริ่มคอนเทนเนอร์ด้วย uid/gid ปัจจุบันของคุณโดยใช้ --userns=keep-id และเมานต์แบบผูกสถานะ OpenClaw ของคุณเข้าไปในคอนเทนเนอร์
ดำเนินการเริ่มต้นใช้งานภายในคอนเทนเนอร์
./scripts/run-openclaw-podman.sh launch setupจากนั้นเปิด http://127.0.0.1:18789/ และใช้โทเค็นจาก ~/.openclaw/.env
การยืนยันตัวตนของโมเดล: ใช้การยืนยันตัวตนที่ OpenClaw จัดการระหว่างการตั้งค่า (คีย์ Anthropic API หรือ OAuth ผ่านเบราว์เซอร์/การยืนยันตัวตนด้วยรหัสอุปกรณ์ของ OpenAI Codex สำหรับ OpenAI ที่ใช้ Codex) ตัวเรียกใช้งาน Podman จะไม่เมานต์โฮมที่เก็บข้อมูลรับรอง CLI ของโฮสต์ เช่น ~/.claude หรือ ~/.codex เข้าไปในคอนเทนเนอร์สำหรับการตั้งค่าหรือ Gateway การเข้าสู่ระบบ CLI บนโฮสต์ที่มีอยู่เป็นเพียงช่องทางอำนวยความสะดวกเมื่อใช้โฮสต์เดียวกันเท่านั้น สำหรับการติดตั้งในคอนเทนเนอร์ ให้เก็บการยืนยันตัวตนของผู้ให้บริการไว้ในสถานะ ~/.openclaw ที่เมานต์ไว้และจัดการโดยการตั้งค่า
จัดการคอนเทนเนอร์ที่กำลังทำงานจาก CLI บนโฮสต์
export OPENCLAW_CONTAINER=openclawจากนั้นคำสั่ง openclaw ปกติจะทำงานภายในคอนเทนเนอร์นั้นโดยอัตโนมัติ:
openclaw dashboard --no-openopenclaw gateway status --deep # includes extra service scanopenclaw doctoropenclaw channels loginบน macOS เครื่อง Podman อาจทำให้เบราว์เซอร์ดูเหมือนไม่ได้อยู่ภายในเครื่องสำหรับ Gateway หาก Control UI รายงานข้อผิดพลาดการยืนยันตัวตนอุปกรณ์หลังจากเริ่มทำงาน ให้ใช้คำแนะนำเกี่ยวกับ Tailscale ใน Podman และ Tailscale
ตัวเรียกใช้งานด้วยตนเองจะอ่านเฉพาะรายการคีย์ที่เกี่ยวข้องกับ Podman ซึ่งอนุญาตไว้จำนวนเล็กน้อยจาก ~/.openclaw/.env และส่งตัวแปรสภาพแวดล้อมรันไทม์อย่างชัดเจนไปยังคอนเทนเนอร์ โดยจะไม่ส่งไฟล์สภาพแวดล้อมทั้งหมดให้ Podman
Podman และ Tailscale
สำหรับ HTTPS หรือการเข้าถึงเบราว์เซอร์จากระยะไกล ให้ทำตามเอกสารหลักของ Tailscale
หมายเหตุเฉพาะสำหรับ Podman:
- ให้โฮสต์ที่ Podman เผยแพร่คงเป็น
127.0.0.1 - ควรใช้
tailscale serveที่จัดการโดยโฮสต์แทนopenclaw gateway --tailscale serve - บน macOS หากบริบทการยืนยันตัวตนอุปกรณ์ของเบราว์เซอร์ภายในเครื่องไม่น่าเชื่อถือ ให้ใช้การเข้าถึงผ่าน Tailscale แทนวิธีแก้ขัดด้วยทันเนลภายในเครื่องแบบเฉพาะกิจ
ดู Tailscale และ Control UI
Systemd (Quadlet ไม่บังคับ)
หากคุณเรียกใช้ ./scripts/podman/setup.sh --quadlet การตั้งค่าจะติดตั้งไฟล์ Quadlet ที่ ~/.config/containers/systemd/openclaw.container
| การดำเนินการ | คำสั่ง |
|---|---|
| เริ่ม | systemctl --user start openclaw.service |
| หยุด | systemctl --user stop openclaw.service |
| สถานะ | systemctl --user status openclaw.service |
| บันทึก | journalctl --user -u openclaw.service -f |
หลังจากแก้ไขไฟล์ Quadlet:
systemctl --user daemon-reloadsystemctl --user restart openclaw.serviceเพื่อให้ทำงานต่อเนื่องหลังบูตบนโฮสต์ SSH/แบบไม่มีหน้าจอ ให้เปิดใช้งาน lingering สำหรับผู้ใช้ปัจจุบันของคุณ:
sudo loginctl enable-linger "$(whoami)"บริการ Quadlet ที่สร้างขึ้นจะคงรูปแบบเริ่มต้นที่ตายตัวและเสริมความแข็งแกร่งด้านความปลอดภัย ได้แก่ พอร์ตที่เผยแพร่บน 127.0.0.1 (18789 สำหรับ Gateway, 18790 สำหรับบริดจ์), --bind lan ภายในคอนเทนเนอร์, เนมสเปซผู้ใช้ keep-id, OPENCLAW_NO_RESPAWN=1, Restart=on-failure และ TimeoutStartSec=300 โดยจะอ่าน ~/.openclaw/.env เป็น EnvironmentFile สำหรับรันไทม์เพื่อรับค่าต่างๆ เช่น OPENCLAW_GATEWAY_TOKEN แต่จะไม่ใช้รายการอนุญาตการแทนค่าที่เฉพาะเจาะจงกับ Podman ของตัวเรียกใช้งานด้วยตนเอง สำหรับพอร์ตที่เผยแพร่แบบกำหนดเอง โฮสต์ที่เผยแพร่ หรือแฟล็กอื่นๆ สำหรับการเรียกใช้คอนเทนเนอร์ ให้ใช้ตัวเรียกใช้งานด้วยตนเองแทน หรือแก้ไข ~/.config/containers/systemd/openclaw.container โดยตรง แล้วโหลดใหม่และเริ่มบริการใหม่
การกำหนดค่า สภาพแวดล้อม และพื้นที่จัดเก็บ
- ไดเรกทอรีการกำหนดค่า:
~/.openclaw - ไดเรกทอรีพื้นที่ทำงาน:
~/.openclaw/workspace - ไฟล์โทเค็น:
~/.openclaw/.env - ตัวช่วยเรียกใช้งาน:
./scripts/run-openclaw-podman.sh
สคริปต์เรียกใช้งานและ Quadlet จะเมานต์แบบผูกสถานะบนโฮสต์เข้าไปในคอนเทนเนอร์: OPENCLAW_CONFIG_DIR -> /home/node/.openclaw, OPENCLAW_WORKSPACE_DIR -> /home/node/.openclaw/workspace โดยค่าเริ่มต้น ตำแหน่งเหล่านี้เป็นไดเรกทอรีบนโฮสต์ ไม่ใช่สถานะคอนเทนเนอร์แบบไม่ระบุตัวตน ดังนั้น openclaw.json, auth-profiles.json ของแต่ละเอเจนต์, สถานะช่องทาง/ผู้ให้บริการ, เซสชัน และพื้นที่ทำงานจะยังคงอยู่เมื่อเปลี่ยนคอนเทนเนอร์ การตั้งค่ายังกำหนดค่าเริ่มต้นให้ gateway.controlUi.allowedOrigins สำหรับ 127.0.0.1 และ localhost บนพอร์ต Gateway ที่เผยแพร่ เพื่อให้แดชบอร์ดภายในเครื่องทำงานกับการผูกที่ไม่ใช่ลูปแบ็กของคอนเทนเนอร์
ตัวแปรสภาพแวดล้อมที่มีประโยชน์สำหรับตัวเรียกใช้งานด้วยตนเอง (บันทึกค่าเหล่านี้ไว้ใน ~/.openclaw/.env โดยตัวเรียกใช้งานจะอ่านไฟล์นี้ก่อนกำหนดค่าเริ่มต้นสุดท้ายของคอนเทนเนอร์/อิมเมจ):
| ตัวแปร | ค่าเริ่มต้น | ผลลัพธ์ |
|---|---|---|
OPENCLAW_PODMAN_CONTAINER |
openclaw |
ชื่อคอนเทนเนอร์ |
OPENCLAW_PODMAN_IMAGE / OPENCLAW_IMAGE |
openclaw:local |
อิมเมจที่จะเรียกใช้ |
OPENCLAW_PODMAN_GATEWAY_HOST_PORT |
18789 |
พอร์ตโฮสต์ที่แมปกับพอร์ต 18789 ของคอนเทนเนอร์ |
OPENCLAW_PODMAN_BRIDGE_HOST_PORT |
18790 |
พอร์ตโฮสต์ที่แมปกับพอร์ต 18790 ของคอนเทนเนอร์ |
OPENCLAW_PODMAN_PUBLISH_HOST |
127.0.0.1 |
อินเทอร์เฟซโฮสต์สำหรับพอร์ตที่เผยแพร่ |
OPENCLAW_GATEWAY_BIND |
lan |
โหมดการผูก Gateway ภายในคอนเทนเนอร์ |
OPENCLAW_PODMAN_USERNS |
keep-id |
keep-id, auto หรือ host |
หากคุณใช้ OPENCLAW_CONFIG_DIR หรือ OPENCLAW_WORKSPACE_DIR ที่ไม่ใช่ค่าเริ่มต้น ให้กำหนดตัวแปรเดียวกันสำหรับทั้งคำสั่ง ./scripts/podman/setup.sh และคำสั่ง ./scripts/run-openclaw-podman.sh launch ที่เรียกใช้ในภายหลัง เพราะตัวเรียกใช้งานภายในรีโพซิทอรีจะไม่เก็บค่าตำแหน่งแบบกำหนดเองไว้ข้ามเชลล์
การอัปเกรดอิมเมจ
หลังจากบิลด์ใหม่หรือดึงอิมเมจใหม่แล้ว ให้เริ่มคอนเทนเนอร์หรือบริการ Quadlet ใหม่ เมื่อเริ่มทำงานครั้งแรกสำหรับ OpenClaw เวอร์ชันใหม่ Gateway จะดำเนินการซ่อมแซมสถานะและ Plugin อย่างปลอดภัยก่อนรายงานว่าพร้อมใช้งาน
หาก Gateway ออกจากการทำงานแทนที่จะพร้อมใช้งาน ให้เรียกใช้อิมเมจเดียวกันหนึ่งครั้งด้วย
openclaw doctor --fix กับสถานะ/การกำหนดค่าที่เมานต์ชุดเดียวกัน จากนั้นเริ่ม
Gateway ใหม่ตามปกติ:
OPENCLAW_CONFIG_DIR="${OPENCLAW_CONFIG_DIR:-$HOME/.openclaw}"OPENCLAW_WORKSPACE_DIR="${OPENCLAW_WORKSPACE_DIR:-$OPENCLAW_CONFIG_DIR/workspace}"OPENCLAW_PODMAN_IMAGE="${OPENCLAW_PODMAN_IMAGE:-${OPENCLAW_IMAGE:-openclaw:local}}" podman run --rm -it \ --userns=keep-id \ --user "$(id -u):$(id -g)" \ -e HOME=/home/node \ -e NPM_CONFIG_CACHE=/home/node/.openclaw/.npm \ -v "$OPENCLAW_CONFIG_DIR:/home/node/.openclaw:rw" \ -v "$OPENCLAW_WORKSPACE_DIR:/home/node/.openclaw/workspace:rw" \ "$OPENCLAW_PODMAN_IMAGE" \ openclaw doctor --fixบนโฮสต์ SELinux ให้เพิ่ม ,Z ในการเมานต์แบบผูกทั้งสองรายการ หาก Podman ปิดกั้นการเข้าถึง
สถานะที่เมานต์ไว้
คำสั่งที่มีประโยชน์
- บันทึกคอนเทนเนอร์:
podman logs -f openclaw - หยุดคอนเทนเนอร์:
podman stop openclaw - ลบคอนเทนเนอร์:
podman rm -f openclaw - เปิด URL แดชบอร์ดจาก CLI บนโฮสต์:
openclaw dashboard --no-open - ตรวจสอบสถานภาพ/สถานะผ่าน CLI บนโฮสต์:
openclaw gateway status --deep(การตรวจสอบ RPC + การสแกนบริการเพิ่มเติม)
การแก้ไขปัญหา
- ถูกปฏิเสธสิทธิ์ (EACCES) ในการกำหนดค่าหรือพื้นที่ทำงาน: โดยค่าเริ่มต้น คอนเทนเนอร์ทำงานด้วย
--userns=keep-idและ--user <your uid>:<your gid>ตรวจสอบให้แน่ใจว่าตำแหน่งการกำหนดค่า/พื้นที่ทำงานบนโฮสต์เป็นของผู้ใช้ปัจจุบันของคุณ - การเริ่ม Gateway ถูกปิดกั้น (ไม่มี
gateway.mode=local): ตรวจสอบให้แน่ใจว่ามี~/.openclaw/openclaw.jsonและกำหนดgateway.mode="local"โดยscripts/podman/setup.shจะสร้างให้หากยังไม่มี - คอนเทนเนอร์เริ่มใหม่หลังอัปเดตอิมเมจ: เรียกใช้คำสั่ง
openclaw doctor --fixแบบครั้งเดียวใน การอัปเกรดอิมเมจ แล้วเริ่ม Gateway อีกครั้ง - คำสั่ง CLI ของคอนเทนเนอร์ไปยังเป้าหมายผิด: ใช้
openclaw --container <name> ...อย่างชัดเจน หรือส่งออกOPENCLAW_CONTAINER=<name>ในเชลล์ของคุณ openclaw updateล้มเหลวเมื่อใช้--container: เป็นพฤติกรรมที่คาดไว้ ให้บิลด์ใหม่/ดึงอิมเมจ แล้วเริ่มคอนเทนเนอร์หรือบริการ Quadlet ใหม่- บริการ Quadlet ไม่เริ่มทำงาน: เรียกใช้
systemctl --user daemon-reloadแล้วจึงเรียกใช้systemctl --user start openclaw.serviceบนระบบแบบไม่มีหน้าจอ คุณอาจต้องใช้sudo loginctl enable-linger "$(whoami)"เพิ่มเติม - SELinux ปิดกั้นการเมานต์แบบผูก: คงพฤติกรรมการเมานต์เริ่มต้นไว้ ตัวเรียกใช้งานจะเพิ่ม
:Zโดยอัตโนมัติบน Linux เมื่อ SELinux อยู่ในโหมดบังคับใช้หรืออนุญาต