Docker
Docker هو اختياري. استخدمه فقط إذا كنت تريد بوابة معتمدة على الحاويات أو للتحقق من سير عمل Docker.
هل Docker مناسب لي؟
- نعم: إذا كنت تريد بيئة بوابة معزولة وقابلة للتجاهل أو لتشغيل OpenClaw على مضيف بدون تثبيتات محلية.
- لا: إذا كنت تشغل على جهازك الخاص وتريد فقط أسرع حلقة تطوير. استخدم طريقة التثبيت العادية بدلاً من ذلك.
- ملاحظة حول التجزئة (Sandboxing): تجزئة الوكيل تستخدم Docker أيضًا، لكنها لا تتطلب تشغيل البوابة بالكامل داخل Docker. راجع التجزئة (Sandboxing).
يغطي هذا الدليل:
- البوابة المعتمدة على الحاويات (OpenClaw كامل داخل Docker)
- تجزئة الوكيل لكل جلسة (بوابة المضيف + أدوات الوكيل المعزولة بـ Docker)
تفاصيل التجزئة: التجزئة (Sandboxing)
المتطلبات
- Docker Desktop (أو Docker Engine) + Docker Compose الإصدار v2
- ذاكرة وصول عشوائي (RAM) بسعة 2 جيجابايت على الأقل لبناء الصورة (قد يتم إيقاف
pnpm installبسبب نفاد الذاكرة على مضيفين بسعة 1 جيجابايت مع خروج برقم 137) - مساحة قرص كافية للصور + السجلات
- إذا كنت تشغل على مضيف VPS/عام، راجع تعزيز الأمان للتعرض للشبكة، خاصة سياسة جدار الحماية
DOCKER-USERلـ Docker.
البوابة المعتمدة على الحاويات (Docker Compose)
البدء السريع (موصى به)
ℹ️ إعدادات Docker الافتراضية هنا تفترض أوضاع الربط (
lan/loopback)، وليس أسماء مستعارة للمضيف (host aliases). استخدم قيم وضع الربط فيgateway.bind(على سبيل المثالlanأوloopback)، وليس أسماء مستعارة للمضيف مثل0.0.0.0أوlocalhost.
من جذر المستودع:
./docker-setup.sh
هذا البرنامج النصي:
- يبني صورة البوابة محليًا (أو يسحب صورة بعيدة إذا تم تعيين
OPENCLAW_IMAGE) - يشغل معالج الإعداد الأولي (onboarding wizard)
- يطبع تلميحات إعداد مزود اختيارية
- يبدأ البوابة عبر Docker Compose
- ينشئ رمز بوابة (token) ويكتبه في
.env
متغيرات البيئة الاختيارية:
OPENCLAW_IMAGE— استخدام صورة بعيدة بدلاً من البناء محليًا (مثلghcr.io/openclaw/openclaw:latest)OPENCLAW_DOCKER_APT_PACKAGES— تثبيت حزم apt إضافية أثناء البناءOPENCLAW_EXTENSIONS— تثبيت تبعيات الإضافات مسبقًا في وقت البناء (أسماء إضافات مفصولة بمسافات، مثلdiagnostics-otel matrix)OPENCLAW_EXTRA_MOUNTS— إضافة نقاط ربط (bind mounts) إضافية من المضيفOPENCLAW_HOME_VOLUME— الإبقاء على/home/nodeفي وحدة تخزين مسماة (named volume)OPENCLAW_SANDBOX— الاشتراك في تجهيز تجزئة بوابة Docker. فقط القيم الصحيحة الصريحة تمكنها:1,true,yes,onOPENCLAW_INSTALL_DOCKER_CLI— تمرير وسيطة البناء (build arg) لبناء الصور المحلية (1يثبت Docker CLI في الصورة).docker-setup.shيضبط هذا تلقائيًا عندما يكونOPENCLAW_SANDBOX=1للبناء المحلي.OPENCLAW_DOCKER_SOCKET— تجاوز مسار مقبس Docker (الافتراضي: المسارDOCKER_HOST=unix://...، وإلا/var/run/docker.sock)OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1— كسر الحماية: السماح بأهدافws://خاصة وموثوقة على الشبكة الخاصة لمسارات عميل CLI/الإعداد الأولي (الافتراضي هو loopback فقط)OPENCLAW_BROWSER_DISABLE_GRAPHICS_FLAGS=0— تعطيل علامات تعزيز أمان متصفح الحاوية--disable-3d-apis,--disable-software-rasterizer,--disable-gpuعندما تحتاج إلى توافق WebGL/3D.OPENCLAW_BROWSER_DISABLE_EXTENSIONS=0— إبقاء الإضافات ممكّنة عندما تتطلب سير عمل المتصفح ذلك (الافتراضي يعطل الإضافات في متصفح التجربة (sandbox)).OPENCLAW_BROWSER_RENDERER_PROCESS_LIMIT=<N>— تعيين حد عمليات عرض Chromium؛ عيّنه على0لتخطي العلامة واستخدام السلوك الافتراضي لـ Chromium.
بعد انتهائه:
- افتح
http://127.0.0.1:18789/في متصفحك. - الصق الرمز (token) في واجهة التحكم (الإعدادات → الرمز).
- هل تحتاج إلى الرابط مرة أخرى؟ شغل
docker compose run --rm openclaw-cli dashboard --no-open.
تمكين تجزئة الوكيل (sandbox) للبوابة المعتمدة على Docker (اختياري)
يمكن لـ docker-setup.sh أيضًا تجهيز agents.defaults.sandbox.* لنشرات Docker. مكّن باستخدام:
export OPENCLAW_SANDBOX=1
./docker-setup.sh
مسار مقبس مخصص (على سبيل المثال Docker بدون صلاحيات الجذر (rootless)):
export OPENCLAW_SANDBOX=1
export OPENCLAW_DOCKER_SOCKET=/run/user/1000/docker.sock
./docker-setup.sh
ملاحظات:
- البرنامج النصي يربط
docker.sockفقط بعد اجتياز متطلبات التجربة (sandbox). - إذا تعذر إكمال إعداد التجربة (sandbox)، يعيد البرنامج النصي تعيين
agents.defaults.sandbox.modeإلىoffلتجنب تكوين تجربة (sandbox) قديم/معطل عند إعادة التشغيل. - إذا كان
Dockerfile.sandboxمفقودًا، يطبع البرنامج النصي تحذيرًا ويكمل؛ ابنِopenclaw-sandbox:bookworm-slimباستخدامscripts/sandbox-setup.shإذا لزم الأمر. - لقيم
OPENCLAW_IMAGEغير المحلية، يجب أن تحتوي الصورة بالفعل على دعم Docker CLI لتنفيذ التجربة (sandbox).
الأتمتة/التكامل المستمر (غير تفاعلي، بدون ضوضاء TTY)
للبرامج النصية والتكامل المستمر، عطّل تخصيص TTY الزائف لـ Compose باستخدام -T:
docker compose run -T --rm openclaw-cli gateway probe
docker compose run -T --rm openclaw-cli devices list --json
إذا كانت أتمتتك لا تصدر متغيرات جلسة Claude، فإن تركها غير معيّنة الآن يحل إلى قيم فارغة افتراضيًا في docker-compose.yml لتجنب تحذيرات متكررة "المتغير غير معيّن".
ملاحظة أمان الشبكة المشتركة (CLI + البوابة)
يستخدم openclaw-cli network_mode: "service:openclaw-gateway" حتى تتمكن أوامر CLI من الوصول إلى البوابة بشكل موثوق عبر 127.0.0.1 داخل Docker. عالج هذا كحد ثقة مشترك: ربط loopback ليس عزلًا بين هاتين الحاويتين. إذا كنت تحتاج إلى فصل أقوى، شغل الأوامر من مسار شبكة حاوية/مضيف منفصل بدلاً من خدمة openclaw-cli المجمعة. لتقليل التأثير إذا تم اختراق عملية CLI، يلغي تكوين compose NET_RAW/NET_ADMIN ويمكّن no-new-privileges على openclaw-cli. يكتب التكوين/مساحة العمل على المضيف:
~/.openclaw/~/.openclaw/workspace
هل تشغل على VPS؟ راجع Hetzner (Docker VPS).
استخدام صورة بعيدة (تخطي البناء المحلي)
يتم نشر الصور المبنية مسبقًا الرسمية في:
استخدم اسم الصورة ghcr.io/openclaw/openclaw (وليس صور Docker Hub ذات الأسماء المشابهة). العلامات الشائعة:
main— أحدث بناء منmain<version>— بناء علامات الإصدار (على سبيل المثال2026.2.26)latest— أحدث علامة إصدار مستقرة
بيانات وصفية للصورة الأساسية
تستخدم صورة Docker الرئيسية حاليًا:
node:22-bookworm
تنشر صورة docker الآن شروحات صورة الأساس OCI (sha256 هو مثال):
org.opencontainers.image.base.name=docker.io/library/node:22-bookwormorg.opencontainers.image.base.digest=sha256:6d735b4d33660225271fda0a412802746658c3a1b975507b2803ed299609760aorg.opencontainers.image.source=https://github.com/openclaw/openclaworg.opencontainers.image.url=https://openclaw.aiorg.opencontainers.image.documentation=https://docs.openclaw.ai/install/dockerorg.opencontainers.image.licenses=MITorg.opencontainers.image.title=OpenClaworg.opencontainers.image.description=OpenClaw gateway and CLI runtime container imageorg.opencontainers.image.revision=<git-sha>org.opencontainers.image.version=<tag-or-main>org.opencontainers.image.created=<rfc3339 timestamp>
المرجع: شروحات صورة OCI سياق الإصدار: يستخدم تاريخ هذا المستودع المميز بالفعل Bookworm في v2026.2.22 وعلامات 2026 السابقة (على سبيل المثال v2026.2.21, v2026.2.9). افتراضيًا، يبني برنامج الإعداد الصورة من المصدر. لسحب صورة مبنية مسبقًا بدلاً من ذلك، عيّن OPENCLAW_IMAGE قبل تشغيل البرنامج النصي:
export OPENCLAW_IMAGE="ghcr.io/openclaw/openclaw:latest"
./docker-setup.sh
يكتشف البرنامج النصي أن OPENCLAW_IMAGE ليس الافتراضي openclaw:local ويشغل docker pull بدلاً من docker build. كل شيء آخر (الإعداد الأولي، بدء البوابة، إنشاء الرمز) يعمل بنفس الطريقة. لا يزال docker-setup.sh يعمل من جذر المستودع لأنه يستخدم docker-compose.yml المحلي والملفات المساعدة. يتخطى OPENCLAW_IMAGE وقت بناء الصورة المحلية؛ لا يحل محل سير عمل compose/الإعداد.
مساعدات Shell (اختياري)
لتسهيل إدارة Docker اليومية، ثبّت ClawDock:
mkdir -p ~/.clawdock && curl -sL https://raw.githubusercontent.com/openclaw/openclaw/main/scripts/shell-helpers/clawdock-helpers.sh -o ~/.clawdock/clawdock-helpers.sh
أضف إلى تكوين shell الخاص بك (zsh):
echo 'source ~/.clawdock/clawdock-helpers.sh' >> ~/.zshrc && source ~/.zshrc
ثم استخدم clawdock-start, clawdock-stop, clawdock-dashboard، إلخ. شغل clawdock-help لجميع الأوامر. راجع دليل ClawDock المساعد للحصول على التفاصيل.
السير اليدوي (compose)
docker build -t openclaw:local -f Dockerfile .
docker compose run --rm openclaw-cli onboard
docker compose up -d openclaw-gateway
ملاحظة: شغل docker compose ... من جذر المستودع. إذا مكّنت OPENCLAW_EXTRA_MOUNTS أو OPENCLAW_HOME_VOLUME، يكتب برنامج الإعداد docker-compose.extra.yml؛ قم بتضمينه عند تشغيل Compose في مكان آخر:
docker compose -f docker-compose.yml -f docker-compose.extra.yml <command>
رمز واجهة التحكم + الاقتران (Docker)
إذا رأيت "غير مصرح" أو "تم قطع الاتصال (1008): الاقتران مطلوب"، احصل على رابط لوحة تحكم جديد ووافق على جهاز المتصفح:
docker compose run --rm openclaw-cli dashboard --no-open
docker compose run --rm openclaw-cli devices list
docker compose run --rm openclaw-cli devices approve <requestId>
مزيد من التفاصيل: لوحة التحكم, الأجهزة.
نقاط ربط إضافية (اختياري)
إذا كنت تريد ربط أدلة مضيف إضافية داخل الحاويات، عيّن OPENCLAW_EXTRA_MOUNTS قبل تشغيل docker-setup.sh. يقبل هذا قائمة مفصولة بفواصل من نقاط ربط Docker ويطبقها على كل من openclaw-gateway و openclaw-cli عن طريق إنشاء docker-compose.extra.yml. مثال:
export OPENCLAW_EXTRA_MOUNTS="$HOME/.codex:/home/node/.codex:ro,$HOME/github:/home/node/github:rw"
./docker-setup.sh
ملاحظات:
- يجب مشاركة المسارات مع Docker Desktop على macOS/Windows.
- يجب أن يكون كل إدخال
source:target[:options]بدون مسافات أو علامات تبويب أو أسطر جديدة. - إذا قمت بتحرير
OPENCLAW_EXTRA_MOUNTS، أعد تشغيلdocker-setup.shلإعادة إنشاء ملف compose الإضافي. - يتم إنشاء
docker-compose.extra.yml. لا تقم بتحريره يدويًا.
الإبقاء على مجلد home الحاوية بالكامل (اختياري)
إذا كنت تريد بقاء /home/node عبر إعادة إنشاء الحاوية، عيّن وحدة تخزين مسماة عبر OPENCLAW_HOME_VOLUME. ينشئ هذا وحدة تخزين Docker ويربطها في /home/node، مع الحفاظ على نقاط ربط التكوين/مساحة العمل القياسية. استخدم وحدة تخزين مسماة هنا (وليس مسار ربط bind)؛ لنقاط ربط bind، استخدم OPENCLAW_EXTRA_MOUNTS. مثال:
export OPENCLAW_HOME_VOLUME="openclaw_home"
./docker-setup.sh
يمكنك الجمع بين هذا ونقاط الربط الإضافية:
export OPENCLAW_HOME_VOLUME="openclaw_home"
export OPENCLAW_EXTRA_MOUNTS="$HOME/.codex:/home/node/.codex:ro,$HOME/github:/home/node/github:rw"
./docker-setup.sh
ملاحظات:
- يجب أن تطابق وحدات التخزين المسماة
^[A-Za-z0-9][A-Za-z0-9_.-]*$. - إذا قمت بتغيير
OPENCLAW_HOME_VOLUME، أعد تشغيلdocker-setup.shلإعادة إنشاء ملف compose الإضافي. - تبقى وحدة التخزين المسماة حتى تتم إزالتها باستخدام
docker volume rm <name>.
تثبيت حزم apt إضافية (اختياري)
إذا كنت تحتاج إلى حزم نظام داخل الصورة (على سبيل المثال، أدوات بناء أو مكتبات وسائط)، عيّن OPENCLAW_DOCKER_APT_PACKAGES قبل تشغيل docker-setup.sh. يثبت هذا الحزم أثناء بناء الصورة، لذا تبقى حتى إذا تم حذف الحاوية. مثال:
export OPENCLAW_DOCKER_APT_PACKAGES="ffmpeg build-essential"
./docker-setup.sh
ملاحظات:
- يقبل هذا قائمة مفصولة بمسافات من أسماء حزم apt.
- إذا قمت بتغيير
OPENCLAW_DOCKER_APT_PACKAGES، أعد تشغيلdocker-setup.shلإعادة بناء الصورة.
تثبيت تبعيات الإضافات مسبقًا (اختياري)
الإضافات التي تحتوي على package.json الخاص بها (مثل diagnostics-otel, matrix, msteams) تثبت تبعيات npm الخاصة بها عند التحميل الأول. لدمج تلك التبعيات في الصورة بدلاً من ذلك، عيّن OPENCLAW_EXTENSIONS قبل تشغيل docker-setup.sh:
export OPENCLAW_EXTENSIONS="diagnostics-otel matrix"
./docker-setup.sh
أو عند البناء مباشرة:
docker build --build-arg OPENCLAW_EXTENSIONS="diagnostics-otel matrix" .
ملاحظات:
- يقبل هذا قائمة مفصولة بمسافات من أسماء أدلة الإضافات (تحت
extensions/). - فقط الإضافات التي تحتوي على
package.jsonتتأثر؛ يتم تجاهل الإضافات الخفيفة التي لا تحتوي على واحد. - إذا قمت بتغيير
OPENCLAW_EXTENSIONS، أعد تشغيلdocker-setup.shلإعادة بناء الصورة.
مستخدم متقدم / حاوية كاملة الميزات (اختياري)
صورة Docker الافتراضية هي أولوية للأمان وتشغل كـ مستخدم غير الجذر node. هذا يحافظ على سطح الهجوم صغيرًا، لكنه يعني:
- لا تثبيت لحزم النظام في وقت التشغيل
- لا يوجد Homebrew افتراضيًا
- لا يوجد متصفحات Chromium/Playwright مجمعة
إذا كنت تريد حاوية أكثر اكتمالاً بالميزات، استخدم هذه المقابض الاختيارية:
- الإبقاء على
/home/nodeحتى تبقى تنزيلات المتصفح وذاكرة التخزين المؤقت للأدوات:
export OPENCLAW_HOME_VOLUME="openclaw_home"
./docker-setup.sh
- دمج تبعيات النظام في الصورة (قابلة للتكرار + دائمة):
export OPENCLAW_DOCKER_APT_PACKAGES="git curl jq"
./docker-setup.sh
- تثبيت متصفحات Playwright بدون
npx(يتجنب تعارضات تجاوز npm):
docker compose run --rm openclaw-cli \
node /app/node_modules/playwright-core/cli.js install chromium
إذا كنت تحتاج إلى Playwright لتثبيت تبعيات النظام، أعد بناء الصورة باستخدام OPENCLAW_DOCKER_APT_PACKAGES بدلاً من استخدام --with-deps في وقت التشغيل.
- الإبقاء على تنزيلات متصفح Playwright:
- عيّن
PLAYWRIGHT_BROWSERS_PATH=/home/node/.cache/ms-playwrightفيdocker-compose.yml. - تأكد من بقاء
/home/nodeعبرOPENCLAW_HOME_VOLUME، أو اربط/home/node/.cache/ms-playwrightعبرOPENCLAW_EXTRA_MOUNTS.
الأذونات + EACCES
تشغل الصورة كـ node (uid 1000). إذا رأيت أخطاء أذونات على /home/node/.openclaw، تأكد من أن نقاط ربط المضيف الخاصة بك مملوكة لـ uid 1000. مثال (مضيف Linux):
sudo chown -R 1000:1000 /path/to/openclaw-config /path/to/openclaw-workspace
إذا اخترت التشغيل كـ جذر للراحة، فأنت تقبل مقايضة الأمان.
إعادة بناء أسرع (موصى به)
لتسريع عمليات إعادة البناء، رتب Dockerfile الخاص بك بحيث يتم تخزين طبقات التبعية مؤقتًا. هذا يتجنب إعادة تشغيل pnpm install إلا إذا تغيرت ملفات القفل:
FROM node:22-bookworm
# Install Bun (required for build scripts)
RUN curl -fsSL https://bun.sh/install | bash
ENV PATH="/root/.bun/bin:${PATH}"
RUN corepack enable
WORKDIR /app
# Cache dependencies unless package metadata changes
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml .npmrc ./
COPY ui/package.json ./ui/package.json
COPY scripts ./scripts
RUN pnpm install --frozen-lockfile
COPY . .
RUN pnpm build
RUN pnpm ui:install
RUN pnpm ui:build
ENV NODE_ENV=production
CMD ["node","dist/index.js"]
إعداد القنوات (اختياري)
استخدم حاوية CLI لتكوين القنوات، ثم أعد تشغيل البوابة إذا لزم الأمر. WhatsApp (QR):
docker compose run --rm openclaw-cli channels login
Telegram (رمز البوت):
docker compose run --rm openclaw-cli channels add --channel telegram --token "<token>"
Discord (رمز البوت):
docker compose run --rm openclaw-cli channels add --channel discord --token "<token>"
الوثائق: WhatsApp, Telegram, Discord
مصادقة OpenAI Codex OAuth (Docker بدون واجهة)
إذا اخترت مصادقة OpenAI Codex OAuth في المعالج، فإنه يفتح عنوان URL للمتصفح ويحاول التقاط رد اتصال على http://127.0.0.1:1455/auth/callback. في إعدادات Docker أو بدون واجهة، قد يظهر هذا الرد اتصال خطأ في المتصفح. انسخ عنوان URL إعادة التوجيه الكامل الذي تصل إليه والصقه مرة أخرى في المعالج لإكمال المصادقة.
فحوصات الصحة
نقاط فحص الحاوية (لا تتطلب مصادقة):
curl -fsS http://127.0.0.1:18789/healthz
curl -fsS http://127.0.0.1:18789/readyz
أسماء مستعارة: /health و /ready. /healthz هو فحص حياة سطحي لـ "عملية البوابة قيد التشغيل". يبقى /readyz جاهزًا خلال فترة السماح عند البدء، ثم يصبح 503 فقط إذا كانت القنوات المدارة المطلوبة لا تزال غير متصلة بعد فترة السماح أو تنقطع لاحقًا. تحتوي صورة Docker على HEALTHCHECK مدمج يفحص /healthz في الخلفية. بعبارات بسيطة: يستمر Docker في التحقق مما إذا كان OpenClaw لا يزال مستجيبًا. إذا استمرت الفحوصات في الفشل، يحدد Docker الحاوية على أنها unhealthy، ويمكن لأنظمة التنسيق (سياسة إعادة تشغيل Docker Compose، Swarm، Kubernetes، إلخ.) إعادة تشغيلها أو استبدالها تلقائيًا. لقطة صحية عميقة مع مصادقة (البوابة + القنوات):
docker compose exec openclaw-gateway node dist/index.js health --token "$OPENCLAW_GATEWAY_TOKEN"
اختبار دخان شامل (Docker)
scripts/e2e/onboard-docker.sh
اختبار دخان استيراد QR (Docker)
pnpm test:docker:qr
LAN مقابل loopback (Docker Compose)
يضبط docker-setup.sh افتراضيًا OPENCLAW_GATEWAY_BIND=lan حتى يعمل وصول المضيف إلى http://127.0.0.1:18789 مع نشر منفذ Docker.
lan(الافتراضي): يمكن لمتصفح المضيف + CLI المضيف الوصول إلى منفذ البوابة المنشور.loopback: فقط العمليات داخل نطاق اسم شبكة الحاوية يمكنها الوصول إلى البوابة مباشرة؛ قد يفشل الوصول إلى المنفذ المنشور على المضيف.
يثبت برنامج الإعداد أيضًا gateway.mode=local بعد الإعداد الأولي حتى تستهدف أوامر CLI لـ Docker افتراضيًا loopback المحلي. ملاحظة تكوين قديم: استخدم قيم وضع الربط في gateway.bind (lan / loopback / custom / tailnet / auto)، وليس أسماء مستعارة للمضيف (0.0.0.0, 127.0.0.1, localhost, ::, ::1). إذا رأيت Gateway target: ws://172.x.x.x:18789 أو أخطاء متكررة pairing required من أوامر CLI لـ Docker، شغل:
docker compose run --rm openclaw-cli config set gateway.mode local
docker compose run --rm openclaw-cli config set gateway.bind lan
docker compose run --rm openclaw-cli devices list --url ws://127.0.0.1:18789
ملاحظات
- ربط البوابة الافتراضي هو
lanلاستخدام الحاوية (OPENCLAW_GATEWAY_BIND). - يستخدم Dockerfile CMD
--allow-unconfigured؛ سيظل التكوين المربوط معgateway.modeليسlocalيبدأ. تجاوز CMD لفرض الحماية. - حاوية البوابة هي مصدر الحقيقة للجلسات (
~/.openclaw/agents/<agentId>/sessions/).
نموذج التخزين
- بيانات المضيف الدائمة: تربط Docker Compose
OPENCLAW_CONFIG_DIRبـ/home/node/.openclawوOPENCLAW_WORKSPACE_DIRبـ/home/node/.openclaw/workspace، لذا تبقى هذه المسارات عند استبدال الحاوية. - tmpfs مؤقت للتجربة (sandbox): عند تمكين
agents.defaults.sandbox، تستخدم حاويات التجربة (sandbox)tmpfsلـ/tmp,/var/tmp, و/run. نقاط الربط هذه منفصلة عن كومة Compose الرئيسية وتختفي مع حاوية التجربة (sandbox). - بؤر نمو القرص: راقب
media/,agents/<agentId>/sessions/sessions.json, ملفات JSONL للنصوص,cron/runs/*.jsonl, وسجلات الملفات المتداولة تحت/tmp/openclaw/(أوlogging.fileالذي قمت بتكوينه). إذا كنت تشغل أيضًا تطبيق macOS خارج Docker، فإن سجلات خدمته منفصلة مرة أخرى:~/.openclaw/logs/gateway.log,~/.openclaw/logs/gateway.err.log, و/tmp/openclaw/openclaw-gateway.log.
تجزئة الوكيل (بوابة المضيف + أدوات Docker)
غوص عميق: التجزئة (Sandboxing)
ما الذي يفعله
عند تمكين agents.defaults.sandbox، تشغل الجلسات غير الرئيسية الأدوات داخل حاوية Docker. تبقى البوابة على مضيفك، لكن تنفيذ الأداة معزول:
- النطاق:
"agent"افتراضيًا (حاوية واحدة + مساحة عمل لكل وكيل) - النطاق:
"session"للعزل لكل جلسة - مجلد مساحة عمل لكل نطاق مربوط في
/workspace - وصول اختياري لمساحة عمل الوكيل (
agents.defaults.sandbox.workspaceAccess) - سياسة السماح/رفض الأداة (الرفض يفوز)
- يتم نسخ الوسائط الواردة في مساحة عمل التجربة (sandbox) النشطة (
media/inbound/*) حتى تتمكن الأدوات من قراءتها (معworkspaceAccess: "rw"، يهبط هذا في مساحة عمل الوكيل)
تحذير: scope: "shared" يعطل العزل بين الجلسات. تشارك جميع الجلسات حاوية واحدة ومساحة عمل واحدة.
ملفات تعريف تجزئة لكل وكيل (متعدد الوكلاء)
إذا كنت تستخدم توجيه متعدد الوكلاء، يمكن لكل وكيل تجاوز إعدادات التجربة (sandbox) + الأدوات: agents.list[].sandbox و agents.list[].tools (بالإضافة إلى agents.list[].tools.sandbox.tools). هذا يتيح لك تشغيل مستويات وصول مختلطة في بوابة واحدة:
- وصول كامل (وكيل شخصي)
- أدوات للقراءة فقط + مساحة عمل للقراءة فقط (وكيل عائلي/عمل)
- لا أدوات نظام ملفات/ shell (وكيل عام)
راجع تجربة وأدوات متعددة الوكلاء (Multi-Agent Sandbox & Tools) للحصول على أمثلة وأسبقية واستكشاف الأخطاء وإصلاحها.
السلوك الافتراضي
- الصورة:
openclaw-sandbox:bookworm-slim - حاوية واحدة لكل وكيل
- وصول مساحة عمل الوكيل:
workspaceAccess: "none"(الافتراضي) يستخدم~/.openclaw/sandboxes"ro"يحافظ على مساحة عمل التجربة (sandbox) في/workspaceويربط مساحة عمل الوكيل للقراءة فقط في/agent(يعطلwrite/edit/apply_patch)"rw"يربط مساحة عمل الوكيل للقراءة/الكتابة في/workspace
- التقليم التلقائي: خامل > 24 ساعة أو عمر > 7 أيام
- الشبكة:
noneافتراضيًا (اشترك صراحة إذا كنت تحتاج إلى خروج)hostمحظور.container:<id>محظور افتراضيًا (خطر الانضمام إلى نطاق الأسماء).
- السماح الافتراضي:
exec,process,read,write,edit,sessions_list,sessions_history,sessions_send,sessions_spawn,session_status - الرفض الافتراضي:
browser,canvas,nodes,cron,discord,gateway
تمكين التجزئة (sandboxing)
إذا كنت تخطط لتثبيت حزم في setupCommand، لاحظ:
docker.networkالافتراضي هو"none"(لا خروج).docker.network: "host"محظور.docker.network: "container:<id>"محظور افتراضيًا.- تجاوز كسر الحماية:
agents.defaults.sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true. readOnlyRoot: trueيمنع تثبيت الحزم.- يجب أن يكون
userهو الجذر لـapt-get(احذفuserأو عيّنuser: "0:0"). يعيد OpenClaw إنشاء الحاويات تلقائيًا عندما يتغيرsetupCommand(أو تكوين docker) إلا إذا كانت الحاوية مستخدمة مؤخرًا (خلال ~5 دقائق). تسجل الحاويات الساخنة تحذيرًا مع أمرopenclaw sandbox recreate ...الدقيق.
{
agents: {
defaults: {
sandbox: {
mode: "non-main", // off | non-main | all
scope: "agent", //