Docker VM Runtime
Shared runtime steps for VM-based Docker installs such as GCP, Hetzner, and similar VPS providers.Bake required binaries into the image
Installing binaries inside a running container is a trap. Anything installed at runtime will be lost on restart. All external binaries required by skills must be installed at image build time. The examples below show three common binaries only:gogfor Gmail accessgoplacesfor Google Placeswaclifor WhatsApp
- Update the Dockerfile
- Rebuild the image
- Restart the containers
The download URLs above are for x86_64 (amd64). For ARM-based VMs (e.g. Hetzner ARM, GCP Tau T2A), replace the download URLs with the appropriate ARM64 variants from each tool’s release page.
Build and launch
Killed or exit code 137 during pnpm install --frozen-lockfile, the VM is out of memory.
Use a larger machine class before retrying.
Verify binaries:
What persists where
OpenClaw runs in Docker, but Docker is not the source of truth. All long-lived state must survive restarts, rebuilds, and reboots.| Component | Location | Persistence mechanism | Notes |
|---|---|---|---|
| Gateway config | /home/node/.openclaw/ | Host volume mount | Includes openclaw.json, tokens |
| Model auth profiles | /home/node/.openclaw/ | Host volume mount | OAuth tokens, API keys |
| Skill configs | /home/node/.openclaw/skills/ | Host volume mount | Skill-level state |
| Agent workspace | /home/node/.openclaw/workspace/ | Host volume mount | Code and agent artifacts |
| WhatsApp session | /home/node/.openclaw/ | Host volume mount | Preserves QR login |
| Gmail keyring | /home/node/.openclaw/ | Host volume + password | Requires GOG_KEYRING_PASSWORD |
| External binaries | /usr/local/bin/ | Docker image | Must be baked at build time |
| Node runtime | Container filesystem | Docker image | Rebuilt every image build |
| OS packages | Container filesystem | Docker image | Do not install at runtime |
| Docker container | Ephemeral | Restartable | Safe to destroy |