Docker (opcjonalnie)
Docker jest opcjonalny. Używaj go tylko wtedy, gdy chcesz konteneryzowaną bramę lub zweryfikować przepływ pracy z Dockerem.Czy Docker jest dla mnie?
- Tak: chcesz odizolowane, tymczasowe środowisko bramy albo uruchamiać OpenClaw na hoście bez instalacji lokalnych.
- Nie: pracujesz na własnym komputerze i zależy Ci na najszybszej pętli developerskiej. Zamiast tego użyj standardowego procesu instalacji.
- Uwaga dotycząca sandboxingu: sandboxing agentów również używa Dockera, ale nie wymaga uruchamiania całej bramy w Dockerze. Zobacz Sandboxing.
- Konteneryzowaną bramę (pełny OpenClaw w Dockerze)
- Sandbox agenta na sesję (host bramy + narzędzia agentów izolowane w Dockerze)
Wymagania
- Docker Desktop (lub Docker Engine) + Docker Compose v2
- Wystarczająca ilość miejsca na dysku na obrazy + logi
Konteneryzowana brama (Docker Compose)
Szybki start (zalecane)
Z repozytorium:- buduje obraz bramy
- uruchamia kreator onboardingu
- wyświetla opcjonalne wskazówki konfiguracji dostawców
- uruchamia bramę przez Docker Compose
- generuje token bramy i zapisuje go do
.env
OPENCLAW_DOCKER_APT_PACKAGES— instaluj dodatkowe pakiety apt podczas budowaniaOPENCLAW_EXTRA_MOUNTS— dodaj dodatkowe bind mounty hostaOPENCLAW_HOME_VOLUME— utrwal/home/nodew nazwanym wolumenie
- Otwórz
http://127.0.0.1:18789/w przeglądarce. - Wklej token w interfejsie Control UI (Ustawienia → token).
- Potrzebujesz ponownie adresu URL? Uruchom
docker compose run --rm openclaw-cli dashboard --no-open.
~/.openclaw/~/.openclaw/workspace
Pomocnicze funkcje powłoki (opcjonalnie)
Aby ułatwić codzienne zarządzanie Dockerem, zainstalujClawDock:
clawdock-start, clawdock-stop, clawdock-dashboard itd. Uruchom clawdock-help, aby zobaczyć wszystkie polecenia.
Szczegóły znajdziesz w ClawDock Helper README.
Ręczny przepływ (compose)
docker compose ... z katalogu głównego repozytorium. Jeśli włączyłeś
OPENCLAW_EXTRA_MOUNTS lub OPENCLAW_HOME_VOLUME, skrypt konfiguracji zapisze
docker-compose.extra.yml; dołącz go podczas uruchamiania Compose w innym miejscu:
Token Control UI + parowanie (Docker)
Jeśli widzisz „unauthorized” lub „disconnected (1008): pairing required”, pobierz świeży link do panelu i zatwierdź urządzenie przeglądarki:Dodatkowe mounty (opcjonalnie)
Jeśli chcesz zamontować dodatkowe katalogi hosta do kontenerów, ustawOPENCLAW_EXTRA_MOUNTS przed uruchomieniem docker-setup.sh. Akceptuje to
rozdzielaną przecinkami listę bind mountów Dockera i stosuje je do
openclaw-gateway oraz openclaw-cli, generując docker-compose.extra.yml.
Przykład:
- Ścieżki muszą być udostępnione Docker Desktop na macOS/Windows.
- Jeśli edytujesz
OPENCLAW_EXTRA_MOUNTS, uruchom ponowniedocker-setup.sh, aby wygenerować dodatkowy plik compose. docker-compose.extra.ymljest generowany. Nie edytuj go ręcznie.
Utrwalenie całego katalogu domowego kontenera (opcjonalnie)
Jeśli chcesz, aby/home/node przetrwał ponowne tworzenie kontenera, ustaw nazwany
wolumen przez OPENCLAW_HOME_VOLUME. Spowoduje to utworzenie wolumenu Dockera i zamontowanie go w
/home/node, przy jednoczesnym zachowaniu standardowych bind mountów konfiguracji/obszaru roboczego. Użyj tutaj
nazwanego wolumenu (nie ścieżki bind); dla bind mountów użyj
OPENCLAW_EXTRA_MOUNTS.
Przykład:
- Jeśli zmienisz
OPENCLAW_HOME_VOLUME, uruchom ponowniedocker-setup.sh, aby wygenerować dodatkowy plik compose. - Nazwany wolumen pozostaje do czasu usunięcia poleceniem
docker volume rm <name>.
Instalacja dodatkowych pakietów apt (opcjonalnie)
Jeśli potrzebujesz pakietów systemowych w obrazie (np. narzędzi do budowania lub bibliotek multimedialnych), ustawOPENCLAW_DOCKER_APT_PACKAGES przed uruchomieniem
docker-setup.sh.
Pakiety są instalowane podczas budowania obrazu, więc pozostają nawet po usunięciu
kontenera.
Przykład:
- Akceptowana jest lista nazw pakietów apt rozdzielona spacjami.
- Jeśli zmienisz
OPENCLAW_DOCKER_APT_PACKAGES, uruchom ponowniedocker-setup.sh, aby przebudować obraz.
Tryb zaawansowany / pełnofunkcyjny kontener (opt-in)
Domyślny obraz Dockera jest nastawiony na bezpieczeństwo i działa jako nie-rootowy użytkowniknode. Zmniejsza to powierzchnię ataku, ale oznacza:
- brak instalacji pakietów systemowych w czasie działania
- brak Homebrew domyślnie
- brak dołączonych przeglądarek Chromium/Playwright
- Utrwal
/home/node, aby pobrania przeglądarek i cache narzędzi przetrwały:
- Wypiecz zależności systemowe w obrazie (powtarzalne + trwałe):
- Zainstaluj przeglądarki Playwright bez
npx(unika konfliktów nadpisywania npm):
OPENCLAW_DOCKER_APT_PACKAGES zamiast używać --with-deps w czasie działania.
- Utrwal pobrania przeglądarek Playwright:
- Ustaw
PLAYWRIGHT_BROWSERS_PATH=/home/node/.cache/ms-playwrightwdocker-compose.yml. - Upewnij się, że
/home/nodejest utrwalone przezOPENCLAW_HOME_VOLUME, albo zamontuj/home/node/.cache/ms-playwrightprzezOPENCLAW_EXTRA_MOUNTS.
Uprawnienia + EACCES
Obraz działa jakonode (uid 1000). Jeśli widzisz błędy uprawnień na
/home/node/.openclaw, upewnij się, że bind mounty hosta należą do uid 1000.
Przykład (host Linux):
Szybsze przebudowy (zalecane)
Aby przyspieszyć przebudowy, uporządkuj Dockerfile tak, aby warstwy zależności były buforowane. Pozwala to uniknąć ponownego uruchamianiapnpm install, o ile nie zmienią się pliki lock:
Konfiguracja kanałów (opcjonalnie)
Użyj kontenera CLI do skonfigurowania kanałów, a następnie w razie potrzeby zrestartuj bramę. WhatsApp (QR):OpenAI Codex OAuth (Docker bez interfejsu)
Jeśli w kreatorze wybierzesz OpenAI Codex OAuth, otworzy on adres URL w przeglądarce i spróbuje przechwycić callback nahttp://127.0.0.1:1455/auth/callback. W Dockerze lub konfiguracjach
bez interfejsu callback może wyświetlić błąd przeglądarki. Skopiuj pełny adres URL przekierowania,
na którym wylądujesz, i wklej go z powrotem do kreatora, aby zakończyć uwierzytelnianie.
Kontrola zdrowia
Test dymny E2E (Docker)
Test dymny importu QR (Docker)
Uwagi
- Bind bramy domyślnie wiąże się z
lando użycia w kontenerze. - CMD w Dockerfile używa
--allow-unconfigured; zamontowana konfiguracja zgateway.mode, a nielocal, nadal się uruchomi. Nadpisz CMD, aby wymusić strażnika. - Kontener bramy jest źródłem prawdy dla sesji (
~/.openclaw/agents/<agentId>/sessions/).
Sandbox agenta (host bramy + narzędzia Docker)
Dogłębnie: SandboxingCo to robi
Gdy włączone jestagents.defaults.sandbox, sesje inne niż główna uruchamiają narzędzia wewnątrz kontenera
Dockera. Brama pozostaje na hoście, ale wykonanie narzędzi jest izolowane:
- zakres:
"agent"domyślnie (jeden kontener + obszar roboczy na agenta) - zakres:
"session"dla izolacji na sesję - katalog obszaru roboczego na zakres montowany w
/workspace - opcjonalny dostęp do obszaru roboczego agenta (
agents.defaults.sandbox.workspaceAccess) - polityka narzędzi allow/deny (deny ma pierwszeństwo)
- media przychodzące są kopiowane do aktywnego obszaru roboczego sandboxa (
media/inbound/*), aby narzędzia mogły je czytać (zworkspaceAccess: "rw"trafia to do obszaru roboczego agenta)
scope: "shared" wyłącza izolację między sesjami. Wszystkie sesje współdzielą
jeden kontener i jeden obszar roboczy.
Profile sandboxa na agenta (wiele agentów)
Jeśli używasz routingu wielu agentów, każdy agent może nadpisać ustawienia sandboxa + narzędzi:agents.list[].sandbox i agents.list[].tools (oraz agents.list[].tools.sandbox.tools). Pozwala to uruchamiać
mieszane poziomy dostępu w jednej bramie:
- Pełny dostęp (agent osobisty)
- Narzędzia tylko do odczytu + obszar roboczy tylko do odczytu (agent rodzinny/roboczy)
- Brak narzędzi systemu plików/powłoki (agent publiczny)
Zachowanie domyślne
- Obraz:
openclaw-sandbox:bookworm-slim - Jeden kontener na agenta
- Dostęp do obszaru roboczego agenta:
workspaceAccess: "none"(domyślnie) używa~/.openclaw/sandboxes"ro"utrzymuje obszar roboczy sandboxa w/workspacei montuje obszar roboczy agenta tylko do odczytu w/agent(wyłączawrite/edit/apply_patch)"rw"montuje obszar roboczy agenta do odczytu/zapisu w/workspace
- Auto-pruning: bezczynność > 24 h LUB wiek > 7 dni
- Sieć:
nonedomyślnie (jawnie włącz, jeśli potrzebujesz wyjścia) - Domyślnie dozwolone:
exec,process,read,write,edit,sessions_list,sessions_history,sessions_send,sessions_spawn,session_status - Domyślnie zabronione:
browser,canvas,nodes,cron,discord,gateway
Włącz sandboxing
Jeśli planujesz instalować pakiety wsetupCommand, zwróć uwagę:
- Domyślne
docker.networkto"none"(brak wyjścia). readOnlyRoot: trueblokuje instalację pakietów.usermusi być rootem dlaapt-get(pomińuserlub ustawuser: "0:0"). OpenClaw automatycznie odtwarza kontenery, gdy zmienia sięsetupCommand(lub konfiguracja Dockera), chyba że kontener był niedawno używany (w ciągu ~5 minut). Gorące kontenery logują ostrzeżenie z dokładnym poleceniemopenclaw sandbox recreate ....
agents.defaults.sandbox.docker:
network, user, pidsLimit, memory, memorySwap, cpus, ulimits,
seccompProfile, apparmorProfile, dns, extraHosts.
Wiele agentów: nadpisz agents.defaults.sandbox.{docker,browser,prune}.* na agenta przez agents.list[].sandbox.{docker,browser,prune}.*
(ignorowane, gdy agents.defaults.sandbox.scope / agents.list[].sandbox.scope to "shared").
Zbuduj domyślny obraz sandboxa
openclaw-sandbox:bookworm-slim przy użyciu Dockerfile.sandbox.
Wspólny obraz sandboxa (opcjonalnie)
Jeśli chcesz obraz sandboxa z typowymi narzędziami do budowania (Node, Go, Rust itd.), zbuduj wspólny obraz:openclaw-sandbox-common:bookworm-slim. Aby go użyć:
Obraz przeglądarki sandboxa
Aby uruchomić narzędzie przeglądarki w sandboxie, zbuduj obraz przeglądarki:openclaw-sandbox-browser:bookworm-slim przy użyciu
Dockerfile.sandbox-browser. Kontener uruchamia Chromium z włączonym CDP oraz
opcjonalnym obserwatorem noVNC (tryb graficzny przez Xvfb).
Uwagi:
- Tryb graficzny (Xvfb) zmniejsza blokowanie botów w porównaniu do headless.
- Headless nadal można użyć, ustawiając
agents.defaults.sandbox.browser.headless=true. - Pełne środowisko desktopowe (GNOME) nie jest wymagane; Xvfb zapewnia wyświetlacz.
- adres URL sterowania przeglądarką sandboxa (dla narzędzia
browser) - adres URL noVNC (jeśli włączone i headless=false)
browser (i usuń z
deny), w przeciwnym razie narzędzie pozostanie zablokowane.
Zasady czyszczenia (agents.defaults.sandbox.prune) dotyczą także kontenerów przeglądarki.
Niestandardowy obraz sandboxa
Zbuduj własny obraz i wskaż go w konfiguracji:Polityka narzędzi (allow/deny)
denyma pierwszeństwo nadallow.- Jeśli
allowjest puste: wszystkie narzędzia (poza deny) są dostępne. - Jeśli
allownie jest puste: dostępne są tylko narzędzia zallow(minus deny).
Strategia czyszczenia
Dwa parametry:prune.idleHours: usuń kontenery nieużywane przez X godzin (0 = wyłącz)prune.maxAgeDays: usuń kontenery starsze niż X dni (0 = wyłącz)
- Zachowaj aktywne sesje, ale ogranicz czas życia:
idleHours: 24,maxAgeDays: 7 - Nigdy nie czyść:
idleHours: 0,maxAgeDays: 0
Uwagi dotyczące bezpieczeństwa
- Twarda izolacja dotyczy wyłącznie narzędzi (exec/read/write/edit/apply_patch).
- Narzędzia tylko-hostowe, takie jak browser/camera/canvas, są domyślnie zablokowane.
- Zezwolenie na
browserw sandboxie łamie izolację (przeglądarka działa na hoście).
Rozwiązywanie problemów
- Brak obrazu: zbuduj przy użyciu
scripts/sandbox-setup.shlub ustawagents.defaults.sandbox.docker.image. - Kontener nie działa: zostanie automatycznie utworzony na żądanie dla sesji.
- Błędy uprawnień w sandboxie: ustaw
docker.userna UID:GID odpowiadające własności zamontowanego obszaru roboczego (lub wykonaj chown na katalogu obszaru roboczego). - Nie znaleziono narzędzi niestandardowych: OpenClaw uruchamia polecenia z
sh -lc(powłoka logowania), która źródłuje/etc/profilei może resetować PATH. Ustawdocker.env.PATH, aby poprzedzić własne ścieżki narzędzi (np./custom/bin:/usr/local/share/npm-global/bin), albo dodaj skrypt w/etc/profile.d/w swoim Dockerfile.