#Docker vs Full VM
1 messages · Page 1 of 1 (latest)
Docs-wise, the “meta” right now is basically: Docker is supported, but explicitly optional — and a plain Linux VM (or bare metal) is still the least-surprising / easiest-to-debug way to run a long-lived Gateway.
When Docker is the move
Use the containerized Gateway flow if you want:
- a clean, reproducible deployment (esp. on a VPS)
- a throwaway environment to validate onboarding / upgrades
- to avoid installing Node/pnpm/etc on the host
The docs literally position it as optional + recommend the scripted flow: ./docker-setup.sh
Docs: https://docs.openclaw.ai/install/docker
When a full VM (no Docker) is the move
Use a normal install on a VM if you want:
- the simplest runtime (no UID/GID bind-mount weirdness, fewer moving parts)
- easier installs for “random system deps” (Playwright browsers, ffmpeg, etc.)
- fewer “container edge cases” when troubleshooting
VPS hub (mix of VM and Docker guides): https://docs.openclaw.ai/vps
Remote access model (important if you’re putting the Gateway in the cloud): https://docs.openclaw.ai/gateway/remote
The big gotcha: “Docker Gateway” vs “Docker sandboxing”
OpenClaw uses Docker in two different ways:
- Run the whole Gateway in Docker (optional)
- Use Docker for tool sandboxing (also optional, but common)
Sandboxing does not require the full Gateway to be containerized.
Docs: https://docs.openclaw.ai/gateway/sandboxing
If you do run the Gateway in Docker and you want agent sandboxing, you can end up in “docker-in-docker-ish” territory (mounting /var/run/docker.sock, needing a docker CLI in the image, permissions on the socket, etc.). That’s doable, but it’s where most of the “why is sandboxing broken” pain tends to come from.
Practical recommendation
- New setup / want stability: run the Gateway on a Linux VM, then pair nodes on your real devices for local screen/camera/exec needs.
Nodes docs: https://docs.openclaw.ai/nodes - You already live in docker-compose land: go Docker Gateway, but go in expecting you may need extra work if you also want sandboxing.