Docker (opsional)
Docker bersifat opsional. Gunakan ini hanya jika Anda menginginkan gateway dalam kontainer atau untuk memvalidasi alur Docker.Apakah Docker tepat untuk saya?
- Ya: jika Anda menginginkan lingkungan gateway yang terisolasi dan sekali pakai, atau ingin menjalankan OpenClaw di host tanpa instalasi lokal.
- Tidak: jika Anda menjalankannya di mesin Anda sendiri dan hanya menginginkan loop pengembangan tercepat. Gunakan alur instalasi normal.
- Catatan sandboxing: sandboxing agen juga menggunakan Docker, tetapi hal itu tidak mengharuskan gateway penuh berjalan di dalam Docker. Lihat Sandboxing.
- Gateway dalam Kontainer (OpenClaw penuh dalam Docker)
- Sandbox Agen Per-sesi (gateway host + alat agen yang terisolasi Docker)
Persyaratan
- Docker Desktop (atau Docker Engine) + Docker Compose v2
- Ruang disk yang cukup untuk citra (image) + log
Gateway dalam Kontainer (Docker Compose)
Mulai cepat (direkomendasikan)
Dari root repositori:- membangun citra (image) gateway
- menjalankan wizard onboarding
- mencetak petunjuk pengaturan penyedia opsional
- memulai gateway melalui Docker Compose
- membuat token gateway dan menulisnya ke
.env
OPENCLAW_DOCKER_APT_PACKAGES— menginstal paket apt tambahan selama proses buildOPENCLAW_EXTRA_MOUNTS— menambahkan bind mount host tambahanOPENCLAW_HOME_VOLUME— mempertahankan/home/nodedalam volume bernama (named volume)
- Buka
http://127.0.0.1:18789/di browser Anda. - Tempelkan token ke Control UI (Settings → token).
- Butuh URL-nya lagi? Jalankan
docker compose run --rm openclaw-cli dashboard --no-open.
~/.openclaw/~/.openclaw/workspace
Pembantu Shell (opsional)
Untuk manajemen Docker harian yang lebih mudah, instalClawDock:
clawdock-start, clawdock-stop, clawdock-dashboard, dll. Jalankan clawdock-help untuk melihat semua perintah.
Lihat README Pembantu ClawDock untuk detailnya.
Alur manual (compose)
docker compose ... dari root repositori. Jika Anda mengaktifkan
OPENCLAW_EXTRA_MOUNTS atau OPENCLAW_HOME_VOLUME, skrip pengaturan akan menulis
docker-compose.extra.yml; sertakan file ini saat menjalankan Compose di tempat lain:
Token Control UI + pairing (Docker)
Jika Anda melihat pesan “unauthorized” atau “disconnected (1008): pairing required”, ambil tautan dashboard baru dan setujui perangkat browser tersebut:Mount tambahan (opsional)
Jika Anda ingin melakukan mount direktori host tambahan ke dalam kontainer, aturOPENCLAW_EXTRA_MOUNTS sebelum menjalankan docker-setup.sh. Ini menerima
daftar bind mount Docker yang dipisahkan koma dan menerapkannya ke
openclaw-gateway maupun openclaw-cli dengan membuat docker-compose.extra.yml.
Contoh:
- Jalur (path) harus dibagikan dengan Docker Desktop di macOS/Windows.
- Setiap entri harus berupa
source:target[:options]tanpa spasi, tab, atau baris baru. - Jika Anda mengedit
OPENCLAW_EXTRA_MOUNTS, jalankan ulangdocker-setup.shuntuk membuat ulang file compose ekstra. docker-compose.extra.ymldibuat secara otomatis. Jangan mengeditnya secara manual.
Mempertahankan seluruh home kontainer (opsional)
Jika Anda ingin/home/node tetap ada meskipun kontainer dibuat ulang, atur
volume bernama melalui OPENCLAW_HOME_VOLUME. Ini akan membuat volume Docker dan melakukan mount pada
/home/node, sambil tetap menggunakan bind mount standar untuk konfigurasi/workspace. Gunakan
volume bernama di sini (bukan jalur bind); untuk bind mount, gunakan
OPENCLAW_EXTRA_MOUNTS.
Contoh:
- Nama volume harus sesuai dengan pola
^[A-Za-z0-9][A-Za-z0-9_.-]*$. - Jika Anda mengubah
OPENCLAW_HOME_VOLUME, jalankan ulangdocker-setup.shuntuk membuat ulang file compose ekstra. - Volume bernama akan tetap ada sampai dihapus dengan
docker volume rm <nama>.
Instal paket apt tambahan (opsional)
Jika Anda membutuhkan paket sistem di dalam citra (misalnya, alat build atau pustaka media), aturOPENCLAW_DOCKER_APT_PACKAGES sebelum menjalankan docker-setup.sh.
Ini akan menginstal paket selama proses pembangunan citra (image build), sehingga tetap ada meskipun
kontainer dihapus.
Contoh:
- Ini menerima daftar nama paket apt yang dipisahkan spasi.
- Jika Anda mengubah
OPENCLAW_DOCKER_APT_PACKAGES, jalankan ulangdocker-setup.shuntuk membangun ulang citra tersebut.
Kontainer untuk Power-user / Fitur Lengkap (opsional)
Citra Docker default dirancang dengan prinsip keamanan utama (security-first) dan berjalan sebagai pengguna non-root bernamanode. Ini meminimalkan permukaan serangan (attack surface), namun artinya:
- tidak ada instalasi paket sistem saat runtime
- tidak ada Homebrew secara default
- tidak menyertakan browser Chromium/Playwright bawaan
- Pertahankan
/home/nodeagar unduhan browser dan cache alat tidak hilang:
- Sertakan dependensi sistem ke dalam citra (dapat diulang + permanen):
- Instal browser Playwright tanpa
npx(menghindari konflik penimpaan npm):
OPENCLAW_DOCKER_APT_PACKAGES alih-alih menggunakan --with-deps saat runtime.
- Pertahankan unduhan browser Playwright:
- Atur
PLAYWRIGHT_BROWSERS_PATH=/home/node/.cache/ms-playwrightdidocker-compose.yml. - Pastikan
/home/nodetetap ada melaluiOPENCLAW_HOME_VOLUME, atau mount/home/node/.cache/ms-playwrightviaOPENCLAW_EXTRA_MOUNTS.
Izin (Permissions) + EACCES
Citra berjalan sebagai penggunanode (uid 1000). Jika Anda melihat error izin pada
/home/node/.openclaw, pastikan bind mount host Anda dimiliki oleh uid 1000.
Contoh (host Linux):
Pembangunan ulang lebih cepat (direkomendasikan)
Untuk mempercepat pembangunan ulang, urutkan Dockerfile Anda agar layer dependensi masuk ke dalam cache. Ini menghindari menjalankan ulangpnpm install kecuali file lock berubah:
Pengaturan saluran (opsional)
Gunakan kontainer CLI untuk mengonfigurasi saluran, lalu restart gateway jika diperlukan. WhatsApp (QR):OpenAI Codex OAuth (Docker headless)
Jika Anda memilih OpenAI Codex OAuth di wizard, ia akan membuka URL browser dan mencoba menangkap callback dihttp://127.0.0.1:1455/auth/callback. Di Docker atau
pengaturan headless, callback tersebut mungkin menunjukkan error browser. Salin URL pengalihan (redirect URL) lengkap tempat Anda mendarat dan tempelkan kembali ke wizard untuk menyelesaikan autentikasi.
Pemeriksaan kesehatan (Health check)
Tes smoke E2E (Docker)
Tes smoke impor QR (Docker)
Catatan
- Bind gateway default ke
lanuntuk penggunaan kontainer. - Perintah CMD Dockerfile menggunakan
--allow-unconfigured; konfigurasi yang di-mount dengangateway.modebukanlocaltetap akan berjalan. Timpa CMD untuk menegakkan batasan tersebut. - Kontainer gateway adalah sumber kebenaran (source of truth) untuk sesi (
~/.openclaw/agents/<agentId>/sessions/).
Sandbox Agen (gateway host + alat Docker)
Pembahasan mendalam: SandboxingApa fungsinya
Ketikaagents.defaults.sandbox diaktifkan, sesi non-utama akan menjalankan alat di dalam kontainer Docker. Gateway tetap berada di host Anda, tetapi eksekusi alat terisolasi:
- cakupan (scope):
"agent"secara default (satu kontainer + workspace per agen) - cakupan (scope):
"session"untuk isolasi per-sesi - folder workspace per-cakupan di-mount di
/workspace - akses workspace agen opsional (
agents.defaults.sandbox.workspaceAccess) - kebijakan alat izinkan/tolak (tolak menang)
- media masuk disalin ke dalam workspace sandbox yang aktif (
media/inbound/*) agar alat dapat membacanya (denganworkspaceAccess: "rw", ini mendarat di workspace agen)
scope: "shared" menonaktifkan isolasi lintas-sesi. Semua sesi berbagi
satu kontainer dan satu workspace.
Profil sandbox per-agen (multi-agen)
Jika Anda menggunakan perutean multi-agen, setiap agen dapat menimpa pengaturan sandbox + alat:agents.list[].sandbox dan agents.list[].tools (ditambah agents.list[].tools.sandbox.tools). Ini memungkinkan Anda menjalankan
berbagai tingkat akses dalam satu gateway:
- Akses penuh (agen pribadi)
- Alat baca-saja + workspace baca-saja (agen keluarga/kerja)
- Tanpa alat sistem file/shell (agen publik)
Perilaku default
- Citra (image):
openclaw-sandbox:bookworm-slim - Satu kontainer per agen
- Akses workspace agen:
workspaceAccess: "none"(default) menggunakan~/.openclaw/sandboxes"ro"menjaga workspace sandbox di/workspacedan melakukan mount workspace agen secara baca-saja di/agent(menonaktifkanwrite/edit/apply_patch)"rw"melakukan mount workspace agen secara baca/tulis di/workspace
- Bersihkan otomatis (Auto-prune): idle > 24 jam ATAU umur > 7 hari
- Jaringan:
nonesecara default (pilih secara eksplisit jika Anda membutuhkan koneksi keluar/egress) - Diizinkan secara default:
exec,process,read,write,edit,sessions_list,sessions_history,sessions_send,sessions_spawn,session_status - Ditolak secara default:
browser,canvas,nodes,cron,discord,gateway
Mengaktifkan sandboxing
Jika Anda berencana menginstal paket disetupCommand, perhatikan:
- Nilai default
docker.networkadalah"none"(tidak ada koneksi keluar/egress). readOnlyRoot: truememblokir instalasi paket.- Pengguna
userharuslah root untukapt-get(kosongkanuseratau aturuser: "0:0"). OpenClaw secara otomatis membuat ulang kontainer saatsetupCommand(atau konfigurasi docker) berubah kecuali kontainer tersebut baru saja digunakan (dalam durasi ~5 menit). Kontainer yang masih panas akan mencatat peringatan dengan perintahopenclaw sandbox recreate ...yang tepat.
agents.defaults.sandbox.docker:
network, user, pidsLimit, memory, memorySwap, cpus, ulimits,
seccompProfile, apparmorProfile, dns, extraHosts.
Multi-agen: timpa agents.defaults.sandbox.{docker,browser,prune}.* per agen melalui agents.list[].sandbox.{docker,browser,prune}.*
(diabaikan jika agents.defaults.sandbox.scope / agents.list[].sandbox.scope bernilai "shared").
Membangun citra sandbox default
openclaw-sandbox:bookworm-slim menggunakan Dockerfile.sandbox.
Citra sandbox umum (opsional)
Jika Anda menginginkan citra sandbox dengan alat build umum (Node, Go, Rust, dll.), bangun citra umum:openclaw-sandbox-common:bookworm-slim. Untuk menggunakannya:
Citra sandbox browser
Untuk menjalankan alat browser di dalam sandbox, bangun citra browser:openclaw-sandbox-browser:bookworm-slim menggunakan
Dockerfile.sandbox-browser. Kontainer ini menjalankan Chromium dengan CDP diaktifkan dan
pengamat noVNC opsional (headful via Xvfb).
Catatan:
- Mode headful (Xvfb) mengurangi pemblokiran bot dibandingkan mode headless.
- Mode headless masih dapat digunakan dengan mengatur
agents.defaults.sandbox.browser.headless=true. - Tidak diperlukan lingkungan desktop penuh (GNOME); Xvfb sudah menyediakan tampilannya.
- URL kontrol browser sandbox (untuk alat
browser) - URL noVNC (jika diaktifkan dan headless=false)
browser (dan hapus dari
daftar tolak/deny) atau alat tersebut akan tetap terblokir.
Aturan pembersihan (agents.defaults.sandbox.prune) juga berlaku untuk kontainer browser.
Citra sandbox kustom
Bangun citra Anda sendiri dan arahkan konfigurasi ke citra tersebut:Kebijakan alat (izinkan/tolak)
deny(tolak) menang atasallow(izinkan).- Jika
allowkosong: semua alat (kecuali yang ditolak) tersedia. - Jika
allowtidak kosong: hanya alat di dalamallowyang tersedia (dikurangi yang ditolak).
Strategi pembersihan (pruning)
Dua pengaturan:prune.idleHours: hapus kontainer yang tidak digunakan dalam X jam (0 = nonaktif)prune.maxAgeDays: hapus kontainer yang umurnya lebih dari X hari (0 = nonaktif)
- Pertahankan sesi sibuk tetapi batasi masa hidupnya:
idleHours: 24,maxAgeDays: 7 - Jangan pernah dihapus:
idleHours: 0,maxAgeDays: 0
Catatan keamanan
- Isolasi keras hanya berlaku untuk alat (exec/read/write/edit/apply_patch).
- Alat khusus host seperti browser/kamera/canvas diblokir secara default.
- Mengizinkan
browserdi sandbox merusak isolasi (browser berjalan di host).
Pemecahan Masalah
- Citra hilang: bangun dengan
scripts/sandbox-setup.shatau aturagents.defaults.sandbox.docker.image. - Kontainer tidak berjalan: kontainer akan dibuat otomatis per sesi sesuai permintaan.
- Error izin di sandbox: atur
docker.userke UID:GID yang sesuai dengan kepemilikan workspace yang di-mount (atau ubah kepemilikan folder workspace). - Alat kustom tidak ditemukan: OpenClaw menjalankan perintah dengan
sh -lc(login shell), yang mengambil sumber dari/etc/profiledan mungkin mengatur ulang PATH. Aturdocker.env.PATHuntuk menambahkan jalur alat kustom Anda (misalnya,/custom/bin:/usr/local/share/npm-global/bin), atau tambahkan skrip di bawah/etc/profile.d/dalam Dockerfile Anda.