agents.defaults.sandbox diaktifkan, tetapi sandbox dinonaktifkan secara default dan tidak mengharuskan Gateway itu sendiri berjalan di Docker. Backend sandbox SSH dan OpenShell juga tersedia; lihat Sandboxing.
Meng-host beberapa pengguna? Lihat Hosting multi-tenant untuk model satu sel per tenant.
Prasyarat
- Docker Desktop (atau Docker Engine) + Docker Compose v2
- RAM minimal 2 GB untuk membangun image (
pnpm installdapat dihentikan karena OOM pada host dengan RAM 1 GB dan keluar dengan kode 137) - Ruang disk yang cukup untuk image dan log
- Pada VPS/host publik, tinjau Penguatan keamanan untuk paparan jaringan, khususnya rantai firewall Docker
DOCKER-USER
Gateway dalam kontainer
Bangun image
openclaw:local. Untuk menggunakan image siap pakai sebagai gantinya:openclaw/openclaw:ghcr.io/openclaw/openclaw atau openclaw/openclaw dan hindari mirror tidak resmi, yang tidak menggunakan waktu rilis atau kebijakan retensi OpenClaw yang sama. Tag resmi: main, latest, <version> (misalnya 2026.2.26), dan tag beta seperti 2026.2.26-beta.1 (beta tidak pernah memindahkan latest/main). Image default main/latest/<version> menyertakan plugin codex dan diagnostics-otel. Varian -browser (misalnya latest-browser) juga dikirimkan dengan Chromium yang sudah tertanam, berguna untuk alat browser dalam sandbox tanpa instalasi Playwright saat pertama kali dijalankan.Jalankan ulang tanpa koneksi jaringan
--offline memverifikasi bahwa OPENCLAW_IMAGE sudah tersedia secara lokal, menonaktifkan pull/build Compose implisit, lalu menjalankan alur normal: sinkronisasi .env, perbaikan izin, onboarding, sinkronisasi konfigurasi Gateway, dan startup Compose.Jika OPENCLAW_SANDBOX=1, penyiapan luring juga memeriksa image sandbox default dan per agen yang dikonfigurasi pada daemon di balik OPENCLAW_DOCKER_SOCKET, termasuk label kontrak browser pada image browser berbasis Docker. Jika image yang diperlukan tidak tersedia atau sudah usang, penyiapan berhenti tanpa mengubah konfigurasi sandbox, alih-alih melaporkan keberhasilan yang sebenarnya rusak.Selesaikan onboarding
- meminta kunci API penyedia
- menghasilkan token Gateway dan menuliskannya ke
.env - membuat direktori kunci rahasia profil autentikasi
- memulai Gateway melalui Docker Compose
openclaw-gateway (dengan --no-deps --entrypoint node), karena openclaw-cli menggunakan namespace jaringan Gateway yang sama dan hanya berfungsi setelah kontainer Gateway tersedia.Buka UI Kontrol
http://127.0.0.1:18789/ dan tempelkan token yang ditulis ke .env ke Settings. Jika Anda mengalihkan kontainer ke autentikasi kata sandi, gunakan kata sandi tersebut sebagai gantinya.Memerlukan URL-nya lagi?Alur manual
.git. Teruskan identitas sumber sebagai argumen build
seperti ditunjukkan di atas agar layar Tentang pada image melaporkan commit yang di-checkout dan
satu stempel waktu build. scripts/docker/setup.sh menentukan dan meneruskan kedua nilai tersebut
secara otomatis.
docker compose dari root repo. Jika Anda mengaktifkan OPENCLAW_EXTRA_MOUNTS atau OPENCLAW_HOME_VOLUME, skrip penyiapan menulis docker-compose.extra.yml; sertakan setelah setiap docker-compose.override.yml yang Anda kelola sendiri, misalnya -f docker-compose.yml -f docker-compose.override.yml -f docker-compose.extra.yml.Meningkatkan versi image kontainer
Saat Anda mengganti image OpenClaw tetapi mempertahankan state/konfigurasi terpasang yang sama, Gateway baru menjalankan migrasi peningkatan versi yang aman saat startup dan konvergensi plugin sebelum siap. Peningkatan versi image rutin seharusnya tidak memerlukan prosesopenclaw doctor --fix terpisah.
Jika startup tidak dapat menyelesaikan perbaikan tersebut dengan aman, Gateway akan berhenti alih-alih
melaporkan status sehat. Dengan kebijakan restart, Docker, Podman, atau Kubernetes mungkin menampilkan
kontainer Gateway yang terus dimulai ulang. Pertahankan volume state yang terpasang, lalu jalankan
image yang sama sekali dengan openclaw doctor --fix sebagai perintah kontainer, menggunakan
mount state/konfigurasi yang sama dengan yang digunakan Gateway:
Variabel lingkungan
Variabel opsional yang diterima olehscripts/docker/setup.sh (dan, untuk kontainer Gateway, langsung oleh docker-compose.yml):
brew; sediakan dependensi tersebut melalui image khusus atau instal secara manual. Gunakan OPENCLAW_IMAGE_APT_PACKAGES untuk dependensi yang dikemas Debian dan OPENCLAW_IMAGE_PIP_PACKAGES untuk dependensi Python (menjalankan python3 -m pip install --break-system-packages pada waktu build, jadi patok versinya dan hanya gunakan indeks yang Anda percayai).
Jika Docker melaporkan ResourceExhausted, cannot allocate memory, atau berhenti selama tsdown, tingkatkan batas memori builder Docker atau coba lagi dengan heap eksplisit yang lebih kecil:
Image yang dibangun dari sumber dengan plugin terpilih
OPENCLAW_EXTENSIONS memilih id manifes plugin dari checkout sumber;
nama direktori sumber yang ada juga diterima jika berbeda. Build Docker
menetapkan pilihan ke direktori sumber satu kali, menginstal dependensi
produksi, dan, ketika plugin yang dipilih diterbitkan secara terpisah dengan
openclaw.build.bundledDist: false, mengompilasi runtime-nya ke dalam dist gabungan
root. Pengemasan khusus Docker ini tidak mengubah kontrak artefak npm atau ClawHub
plugin tersebut. Id yang tidak dikenal, tidak valid, atau ambigu menyebabkan build image gagal.
Id khusus dependensi/sumber yang dikenal mempertahankan staging sumber dan dependensi
yang ada tanpa memperoleh entri dist root terkompilasi. Plugin terpilih dengan
entri build terpadu harus berhasil dikompilasi; sumber dan output runtime plugin
eksternal yang tidak dipilih dipangkas.
Misalnya, perintah berikut membuat image gateway mandiri FakeCo
multi-arsitektur yang terpisah untuk ClickClack, Slack, dan Microsoft Teams. ClawRouter
sudah menjadi bagian dari runtime root OpenClaw, sehingga image ClickClack hanya memilih
clickclack. Argumen browser kosong yang eksplisit menjaga image default tetap bebas
dari Chromium:
--platform linux/arm64 --load atau --platform linux/amd64 --load untuk
satu build lokal native. Output multiplatform serta SBOM/provenance terlampir
memerlukan registry atau output Buildx lain yang mempertahankan atestasi. Setelah
melakukan push, periksa manifes dan terapkan digest yang tidak dapat diubah alih-alih
tag SHA sumber yang dapat diubah:
OPENCLAW_EXTRA_MOUNTS=/path/to/fork/extensions/synology-chat:/app/extensions/synology-chat:ro. Ini menggantikan bundle /app/dist/extensions/synology-chat terkompilasi yang cocok untuk id plugin yang sama.
Observabilitas
Ekspor OpenTelemetry bersifat keluar dari kontainer Gateway menuju kolektor OTLP Anda; ini tidak memerlukan port Docker yang dipublikasikan. Untuk menyertakan eksportir gabungan dalam image yang dibuat secara lokal:diagnostics-otel; instal sendiri clawhub:@openclaw/diagnostics-otel hanya jika Anda menghapusnya. Untuk mengaktifkan ekspor, izinkan dan aktifkan plugin diagnostics-otel dalam konfigurasi, lalu tetapkan diagnostics.otel.enabled=true (lihat contoh lengkap di Ekspor OpenTelemetry). Header autentikasi kolektor diteruskan melalui diagnostics.otel.headers, bukan variabel lingkungan Docker.
Metrik Prometheus menggunakan kembali port Gateway yang sudah dipublikasikan. Instal clawhub:@openclaw/diagnostics-prometheus, aktifkan plugin diagnostics-prometheus, lalu lakukan scraping:
/metrics terpisah atau jalur reverse proxy tanpa autentikasi. Lihat Metrik Prometheus.
Pemeriksaan kesehatan
Endpoint probe kontainer (tidak memerlukan autentikasi):HEALTHCHECK bawaan image melakukan ping ke /healthz; kegagalan berulang menandai kontainer sebagai unhealthy agar orkestrator dapat memulai ulang atau menggantinya.
Snapshot kesehatan mendalam yang diautentikasi:
LAN vs loopback
scripts/docker/setup.sh menetapkan OPENCLAW_GATEWAY_BIND=lan secara default agar http://127.0.0.1:18789 pada host berfungsi dengan publikasi port Docker.
lan(default): browser host dan CLI host dapat mengakses port gateway yang dipublikasikan.loopback: hanya proses di dalam namespace jaringan kontainer yang dapat mengakses gateway secara langsung.
gateway.bind (lan / loopback / custom / tailnet / auto), bukan alias host seperti 0.0.0.0 atau 127.0.0.1.Penyedia lokal host
Di dalam kontainer,127.0.0.1 adalah kontainer itu sendiri, bukan host. Gunakan host.docker.internal untuk penyedia yang berjalan pada host:
docker-compose.yml memetakan host.docker.internal ke gateway host pada Docker Engine Linux (Docker Desktop menyediakan alias yang sama pada macOS/Windows). Layanan host harus mendengarkan pada alamat yang dapat dijangkau Docker:
docker run? Tambahkan sendiri pemetaan yang sama, misalnya --add-host=host.docker.internal:host-gateway.
Backend Claude CLI di Docker
Image resmi tidak menginstal Claude Code sebelumnya. Instal dan masuk di dalam penggunanode kontainer, lalu persistensikan home kontainer tersebut agar peningkatan image tidak menghapus biner atau status autentikasi.
Untuk instalasi baru, aktifkan volume /home/node persisten sebelum menjalankan penyiapan:
.env saat ini terlebih dahulu — skrip penyiapan selalu menulis ulang .env dari shell dan default saat ini, skrip tersebut tidak membaca file itu sendiri:
.env berisi nilai yang tidak dapat dimuat oleh shell Anda, ekspor ulang secara manual terlebih dahulu nilai yang Anda andalkan (OPENCLAW_IMAGE, port, mode bind, jalur khusus, OPENCLAW_EXTRA_MOUNTS, sandbox, lewati onboarding). Overlay yang dihasilkan memasang volume home untuk openclaw-gateway dan openclaw-cli; jalankan perintah yang tersisa dengan overlay tersebut (dan docker-compose.override.yml terlebih dahulu, jika Anda menggunakannya):
claude ke /home/node/.local/bin/claude. Arahkan OpenClaw ke jalur tersebut:
claude-cli gabungan:
OPENCLAW_HOME_VOLUME mempertahankan instalasi native di bawah /home/node/.local/bin dan /home/node/.local/share/claude, serta pengaturan/autentikasi Claude Code di bawah /home/node/.claude dan /home/node/.claude.json. Mempertahankan hanya /home/node/.openclaw tidaklah cukup; jika Anda menggunakan OPENCLAW_EXTRA_MOUNTS alih-alih volume home, pasang semua jalur Claude tersebut ke kedua layanan.
Bonjour / mDNS
Jaringan bridge Docker biasanya tidak meneruskan multicast Bonjour/mDNS (224.0.0.251:5353) secara andal. Ketika OPENCLAW_DISABLE_BONJOUR tidak ditetapkan, plugin Bonjour gabungan otomatis menonaktifkan iklan LAN setelah mendeteksi bahwa plugin berjalan dalam kontainer, sehingga tidak akan mengalami crash loop saat berulang kali mencoba multicast yang dibuang bridge. Tetapkan OPENCLAW_DISABLE_BONJOUR=1 untuk memaksanya nonaktif terlepas dari hasil deteksi, atau 0 untuk memaksanya aktif (hanya pada jaringan host, macvlan, atau jaringan lain yang diketahui mendukung multicast mDNS).
Jika tidak, gunakan URL Gateway yang dipublikasikan, Tailscale, atau DNS-SD area luas untuk host Docker. Lihat Penemuan Bonjour untuk kendala dan pemecahan masalah.
Penyimpanan dan persistensi
Docker Compose memasang secara bindOPENCLAW_CONFIG_DIR ke /home/node/.openclaw, OPENCLAW_WORKSPACE_DIR ke /home/node/.openclaw/workspace, dan OPENCLAW_AUTH_PROFILE_SECRET_DIR ke /home/node/.config/openclaw, sehingga jalur tersebut tetap bertahan setelah penggantian kontainer. Ketika suatu variabel tidak ditetapkan, docker-compose.yml kembali menggunakan lokasi di bawah ${HOME}, atau /tmp jika HOME sendiri tidak ada, sehingga docker compose up tidak pernah menghasilkan spesifikasi volume dengan sumber kosong pada lingkungan dasar.
Direktori konfigurasi yang dipasang tersebut menyimpan:
openclaw.jsonuntuk konfigurasi perilakuagents/<agentId>/agent/auth-profiles.jsonuntuk autentikasi OAuth/kunci API penyedia yang tersimpan.envuntuk rahasia runtime yang didukung env sepertiOPENCLAW_GATEWAY_TOKEN
OPENCLAW_CONFIG_DIR.
Plugin unduhan yang diinstal menyimpan status paket di bawah home OpenClaw yang dipasang, sehingga catatan instalasi dan root paket tetap bertahan setelah penggantian kontainer; startup gateway tidak membuat ulang pohon dependensi plugin gabungan.
Untuk detail lengkap persistensi VM, lihat Runtime VM Docker - Apa yang dipertahankan di mana.
Titik utama pertumbuhan disk: media/, database SQLite per agen, transkrip JSONL sesi lama, database status SQLite bersama, root paket plugin yang diinstal, dan log file bergulir di bawah /tmp/openclaw/.
Pembantu shell (opsional)
Untuk perintah harian yang lebih singkat, instal ClawDock:scripts/shell-helpers/clawdock-helpers.sh yang lama, jalankan kembali perintah di atas agar helper lokal Anda mengikuti lokasi saat ini. Kemudian gunakan clawdock-start, clawdock-stop, clawdock-dashboard, dan seterusnya (jalankan clawdock-help untuk daftar lengkap).
Aktifkan sandbox agen untuk Gateway Docker
Aktifkan sandbox agen untuk Gateway Docker
docker.sock hanya setelah prasyarat sandbox terpenuhi. Jika penyiapan sandbox tidak dapat diselesaikan, skrip mengatur ulang agents.defaults.sandbox.mode ke off. Mode kode Codex dinonaktifkan untuk giliran saat sandbox OpenClaw aktif (lihat Sandboxing § Backend Docker); jangan pernah memasang soket Docker host ke dalam kontainer sandbox agen.Otomatisasi / CI (noninteraktif)
Otomatisasi / CI (noninteraktif)
-T:Catatan keamanan jaringan bersama
Catatan keamanan jaringan bersama
openclaw-cli menggunakan network_mode: "service:openclaw-gateway" agar perintah CLI dapat menjangkau Gateway melalui 127.0.0.1. Perlakukan ini sebagai batas kepercayaan bersama. Konfigurasi Compose menghapus NET_RAW/NET_ADMIN dan mengaktifkan no-new-privileges pada openclaw-gateway maupun openclaw-cli.Kegagalan DNS Docker Desktop di openclaw-cli
Kegagalan DNS Docker Desktop di openclaw-cli
openclaw-cli setelah NET_RAW dihapus, yang muncul sebagai EAI_AGAIN selama perintah berbasis npm seperti openclaw plugins install. Pertahankan berkas Compose yang diperkeras secara default untuk operasi normal. Override di bawah memulihkan kapabilitas default hanya untuk kontainer openclaw-cli — gunakan untuk perintah satu kali yang memerlukan akses registry, bukan sebagai pemanggilan default Anda:openclaw-cli yang berjalan lama, buat ulang dengan override yang sama — docker compose exec/docker exec tidak dapat mengubah kapabilitas Linux pada kontainer yang sudah dibuat.Izin dan EACCES
Izin dan EACCES
node (uid 1000). Jika Anda melihat kesalahan izin pada /home/node/.openclaw, pastikan bind mount host Anda dimiliki oleh uid 1000:blocked plugin candidate: suspicious ownership (... uid=1000, expected uid=0 or root) diikuti oleh plugin present but blocked — uid proses dan pemilik direktori Plugin yang dipasang tidak cocok. Sebaiknya jalankan sebagai uid default 1000 dan perbaiki kepemilikan bind mount. Ubah kepemilikan /path/to/openclaw-config/npm menjadi root:root hanya jika Anda sengaja menjalankan OpenClaw sebagai root dalam jangka panjang.Build ulang yang lebih cepat
Build ulang yang lebih cepat
pnpm install kecuali lockfile berubah:Opsi kontainer untuk pengguna mahir
Opsi kontainer untuk pengguna mahir
node non-root. Untuk kontainer dengan fitur lebih lengkap:- Persistenkan
/home/node:export OPENCLAW_HOME_VOLUME="openclaw_home" - Sertakan dependensi sistem dalam image:
export OPENCLAW_IMAGE_APT_PACKAGES="git curl jq" - Sertakan dependensi Python dalam image:
export OPENCLAW_IMAGE_PIP_PACKAGES="requests==2.32.5 humanize==4.14.0" - Sertakan Playwright Chromium dalam image:
export OPENCLAW_INSTALL_BROWSER=1, atau gunakan tag image resmi-browser - Atau instal browser Playwright ke volume persisten:
- Persistenkan unduhan browser: gunakan
OPENCLAW_HOME_VOLUMEatauOPENCLAW_EXTRA_MOUNTS. OpenClaw secara otomatis mendeteksi Chromium yang dikelola Playwright milik image di Linux.
OAuth OpenAI Codex (Docker headless)
OAuth OpenAI Codex (Docker headless)
Metadata image dasar
Metadata image dasar
node:24-bookworm-slim dan menjalankan tini sebagai PID 1 agar proses zombie dibersihkan dan sinyal ditangani dengan benar dalam kontainer yang berjalan lama. Image tersebut memublikasikan anotasi image dasar OCI, termasuk org.opencontainers.image.base.name dan org.opencontainers.image.source. Dependabot memperbarui digest dasar Node yang disematkan; build rilis tidak menjalankan lapisan peningkatan distro terpisah. Lihat anotasi image OCI.Berjalan di VPS?
Lihat Hetzner (VPS Docker) dan Runtime VM Docker untuk langkah penerapan VM bersama, termasuk penyertaan biner dalam image, persistensi, dan pembaruan.Sandbox agen
Saatagents.defaults.sandbox diaktifkan dengan backend Docker, Gateway menjalankan eksekusi alat agen (shell, baca/tulis berkas, dan sebagainya) di dalam kontainer Docker terisolasi sementara Gateway itu sendiri tetap berada di host — batas tegas di sekitar sesi agen yang tidak tepercaya atau multitenan tanpa memasukkan seluruh Gateway ke dalam kontainer.
Cakupan sandbox dapat berupa per agen (default), per sesi, atau bersama; setiap cakupan mendapatkan ruang kerja sendiri yang dipasang di /workspace. Anda juga dapat mengonfigurasi kebijakan alat izinkan/tolak, isolasi jaringan, batas sumber daya, dan kontainer browser.
Untuk konfigurasi lengkap, image, catatan keamanan, dan profil multiagen:
- Sandboxing — referensi sandbox lengkap
- OpenShell — akses shell interaktif ke kontainer sandbox
- Sandbox dan Alat Multiagen — override per agen
Aktivasi cepat
docker build sebaris.
Pemecahan masalah
Image tidak tersedia atau kontainer sandbox tidak dimulai
Image tidak tersedia atau kontainer sandbox tidak dimulai
scripts/sandbox-setup.sh (checkout sumber) atau perintah docker build sebaris dari Sandboxing § Image dan penyiapan (instalasi npm), atau atur agents.defaults.sandbox.docker.image ke image khusus Anda. Kontainer dibuat secara otomatis per sesi sesuai kebutuhan.Kesalahan izin dalam sandbox
Kesalahan izin dalam sandbox
docker.user ke UID:GID yang cocok dengan kepemilikan ruang kerja yang dipasang, atau ubah kepemilikan folder ruang kerja.Alat khusus tidak ditemukan dalam sandbox
Alat khusus tidak ditemukan dalam sandbox
sh -lc (shell login), yang memuat /etc/profile dan dapat mengatur ulang PATH. Atur docker.env.PATH untuk menambahkan jalur alat khusus Anda di awal, atau tambahkan skrip di bawah /etc/profile.d/ dalam Dockerfile Anda.Dihentikan OOM selama build image (exit 137)
Dihentikan OOM selama build image (exit 137)
Tidak diotorisasi atau pemasangan diperlukan di UI Kontrol
Tidak diotorisasi atau pemasangan diperlukan di UI Kontrol
Target Gateway menampilkan ws://172.x.x.x atau kesalahan pemasangan dari CLI Docker
Target Gateway menampilkan ws://172.x.x.x atau kesalahan pemasangan dari CLI Docker
Terkait
- Ikhtisar Instalasi — semua metode instalasi
- Podman — alternatif Podman untuk Docker
- ClawDock — penyiapan Docker Compose komunitas
- Pembaruan — menjaga OpenClaw tetap mutakhir
- Konfigurasi — konfigurasi Gateway setelah instalasi