Docker (اختياري)
Docker اختياري. استخدمه فقط إذا كنت تريد Gateway مُحَوْسَبًا بالحاويات أو للتحقق من مسار Docker.هل Docker مناسب لي؟
- نعم: تريد بيئة Gateway معزولة وسهلة الاستبدال، أو تشغيل OpenClaw على مضيف دون تثبيتات محلية.
- لا: تعمل على جهازك الشخصي وتريد أسرع دورة تطوير. استخدم مسار التثبيت العادي بدلًا من ذلك.
- ملاحظة sandboxing: يستخدم sandboxing الخاص بالوكيل Docker أيضًا، لكنه لا يتطلب تشغيل Gateway بالكامل داخل Docker. راجع Sandboxing.
- Gateway مُحَوْسَب بالحاويات (OpenClaw كامل داخل Docker)
- Sandbox وكيل لكل جلسة (Gateway على المضيف + أدوات وكيل معزولة بـ Docker)
المتطلبات
- Docker Desktop (أو Docker Engine) + Docker Compose v2
- مساحة قرص كافية للصور + السجلات
Gateway مُحَوْسَب بالحاويات (Docker Compose)
البدء السريع (موصى به)
من جذر المستودع:- يبني صورة الـ Gateway
- تشغيل معالج أونبواردينغ
- يطبع تلميحات إعداد الموفّرين الاختيارية
- يبدأ الـ Gateway عبر Docker Compose
- يولّد رمز Gateway ويكتبه إلى
.env
OPENCLAW_DOCKER_APT_PACKAGES— تثبيت حِزَم apt إضافية أثناء البناءOPENCLAW_EXTRA_MOUNTS— إضافة ربطات bind إضافية من المضيفOPENCLAW_HOME_VOLUME— الإبقاء على/home/nodeفي وحدة تخزين مُسماة
- افتح
http://127.0.0.1:18789/في المتصفح. - الصق الرمز في واجهة التحكم (الإعدادات → الرمز).
- هل تحتاج إلى عنوان URL مرة أخرى؟ هل تحتاج إلى عنوان URL مرة أخرى؟ هل تحتاج العنوان مرة أخرى؟ شغّل
docker compose run --rm openclaw-cli dashboard --no-open.
~/.openclaw/~/.openclaw/workspace
مساعدات Shell (اختياري)
لتسهيل إدارة Docker اليومية، ثبّتClawDock:
clawdock-start وclawdock-stop وclawdock-dashboard وغيرها. شغّل clawdock-help لعرض جميع الأوامر.
راجع ClawDock Helper README للتفاصيل.
المسار اليدوي (compose)
docker compose ... من جذر المستودع. إذا فعّلت
OPENCLAW_EXTRA_MOUNTS أو OPENCLAW_HOME_VOLUME، فإن سكربت الإعداد يكتب
docker-compose.extra.yml؛ ضمّنه عند تشغيل Compose في مكان آخر:
رمز واجهة التحكم + الاقتران (Docker)
إذا رأيت «unauthorized» أو «disconnected (1008): pairing required»، فاحصل على رابط لوحة معلومات جديد ووافق جهاز المتصفح:ربطات إضافية (اختياري)
إذا أردت ربط أدلة إضافية من المضيف داخل الحاويات، فاضبطOPENCLAW_EXTRA_MOUNTS قبل تشغيل docker-setup.sh. يقبل هذا
قائمة مفصولة بفواصل من ربطات Docker bind ويطبّقها على كلٍّ من
openclaw-gateway و openclaw-cli عبر توليد docker-compose.extra.yml.
مثال:
- يجب مشاركة المسارات مع Docker Desktop على macOS/Windows.
- إذا عدّلت
OPENCLAW_EXTRA_MOUNTS، فأعد تشغيلdocker-setup.shلإعادة توليد ملف compose الإضافي. - يتم توليد
docker-compose.extra.yml. لا تعدّله يدويًا.
الإبقاء على دليل المنزل الكامل للحاوية (اختياري)
إذا أردت أن يبقى/home/node عبر إعادة إنشاء الحاوية، فاضبط وحدة تخزين مُسماة
عبر OPENCLAW_HOME_VOLUME. ينشئ هذا وحدة تخزين Docker ويربطها عند
/home/node، مع الحفاظ على ربطات الإعداد/مساحة العمل القياسية. استخدم
وحدة تخزين مُسماة هنا (وليس مسار bind)؛ وبالنسبة لربطات bind، استخدم
OPENCLAW_EXTRA_MOUNTS.
مثال:
- إذا غيّرت
OPENCLAW_HOME_VOLUME، فأعد تشغيلdocker-setup.shلإعادة توليد ملف compose الإضافي. - تستمر وحدة التخزين المُسماة حتى تُزال باستخدام
docker volume rm <name>.
تثبيت حِزَم apt إضافية (اختياري)
إذا احتجت إلى حِزَم نظام داخل الصورة (على سبيل المثال، أدوات بناء أو مكتبات وسائط)، فاضبطOPENCLAW_DOCKER_APT_PACKAGES قبل تشغيل docker-setup.sh.
يُثبّت هذا الحِزَم أثناء بناء الصورة، لذا تبقى حتى لو حُذفت الحاوية.
مثال:
- يقبل هذا قائمة أسماء حِزَم apt مفصولة بمسافات.
- إذا غيّرت
OPENCLAW_DOCKER_APT_PACKAGES، فأعد تشغيلdocker-setup.shلإعادة بناء الصورة.
حاوية متقدمة/كاملة الميزات (اختياري)
صورة Docker الافتراضية أمنية أولًا وتعمل كمستخدم غير جذريnode. يقلّل ذلك سطح الهجوم، لكنه يعني:
- عدم تثبيت حِزَم النظام أثناء التشغيل
- عدم وجود Homebrew افتراضيًا
- عدم تضمين متصفحات Chromium/Playwright
- الإبقاء على
/home/nodeبحيث تبقى تنزيلات المتصفح ومخابئ الأدوات:
- خبز تبعيات النظام داخل الصورة (قابل للتكرار + دائم):
- تثبيت متصفحات Playwright دون
npx(يتجنب تعارضات تجاوز npm):
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):
إعادة بناء أسرع (موصى به)
لتسريع إعادة البناء، رتّب Dockerfile بحيث تُخزَّن طبقات التبعيات مؤقتًا. هذا يتجنب إعادة تشغيلpnpm install ما لم تتغير ملفات القفل:
إعداد القنوات (اختياري)
استخدم حاوية CLI لتهيئة القنوات، ثم أعد تشغيل Gateway إذا لزم الأمر. WhatsApp (رمز QR):OAuth لـ OpenAI Codex (Docker دون واجهة)
إذا اخترت OAuth لـ OpenAI Codex في المعالج، فسيُفتح عنوان متصفح ويحاول التقاط ردّ علىhttp://127.0.0.1:1455/auth/callback. في Docker أو
الإعدادات دون واجهة قد يظهر خطأ متصفح. انسخ عنوان إعادة التوجيه الكامل
الذي تصل إليه والصقه مجددًا في المعالج لإتمام المصادقة.
فحص الصحة
اختبار دخان E2E (Docker)
اختبار دخان لاستيراد QR (Docker)
ملاحظات
- ربط Gateway الافتراضي هو
lanلاستخدام الحاويات. - يستخدم CMD في Dockerfile
--allow-unconfigured؛ سيبدأ التكوين المُثبّت معgateway.modeوليسlocal. غيّر CMD لفرض الحارس. - حاوية Gateway هي مصدر الحقيقة للجلسات (
~/.openclaw/agents/<agentId>/sessions/).
Sandbox الوكيل (Gateway على المضيف + أدوات Docker)
تعمّق: Sandboxingما الذي يفعله
عند تمكينagents.defaults.sandbox، تعمل الجلسات غير الرئيسية على تشغيل الأدوات داخل
حاوية Docker. يبقى Gateway على مضيفك، لكن تنفيذ الأدوات يكون معزولًا:
- النطاق:
"agent"افتراضيًا (حاوية واحدة + مساحة عمل لكل وكيل) - النطاق:
"session"للعزل لكل جلسة - مجلد مساحة عمل لكل نطاق مُثبت عند
/workspace - وصول اختياري لمساحة عمل الوكيل (
agents.defaults.sandbox.workspaceAccess) - سياسة أدوات سماح/منع (المنع له الأسبقية)
- تُنسخ الوسائط الواردة إلى مساحة عمل الـ sandbox النشطة (
media/inbound/*) ليتمكنـت الأدوات من قراءتها (ومعworkspaceAccess: "rw"، تهبط في مساحة عمل الوكيل)
scope: "shared" العزل بين الجلسات. تشترك جميع الجلسات في
حاوية واحدة ومساحة عمل واحدة.
ملفات تعريف sandbox لكل وكيل (متعدد الوكلاء)
إذا استخدمت توجيهًا متعدد الوكلاء، يمكن لكل وكيل تجاوز إعدادات sandbox + الأدوات:agents.list[].sandbox و agents.list[].tools (بالإضافة إلى agents.list[].tools.sandbox.tools). يتيح لك ذلك تشغيل
مستويات وصول مختلطة في Gateway واحد:
- وصول كامل (وكيل شخصي)
- أدوات للقراءة فقط + مساحة عمل للقراءة فقط (وكيل عائلة/عمل)
- بدون أدوات نظام ملفات/قشرة (وكيل عام)
السلوك الافتراضي
- الصورة:
openclaw-sandbox:bookworm-slim - حاوية واحدة لكل وكيل
- وصول مساحة عمل الوكيل:
workspaceAccess: "none"(افتراضي) يستخدم~/.openclaw/sandboxes- يحافظ
"ro"على مساحة عمل الـ sandbox عند/workspaceويربط مساحة عمل الوكيل للقراءة فقط عند/agent(يعطّلwrite/edit/apply_patch) - يربط
"rw"مساحة عمل الوكيل قراءة/كتابة عند/workspace
- يحافظ
- التنظيف التلقائي: خمول > 24 ساعة أو العمر > 7 أيام
- الشبكة:
noneافتراضيًا (اشترك صراحة إذا احتجت الخروج) - السماح الافتراضي:
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"(لا خروج). - يمنع
readOnlyRoot: trueتثبيت الحِزَم. - يجب أن يكون
userمستخدم root من أجلapt-get(احذفuserأو اضبطuser: "0:0"). يعيد OpenClaw إنشاء الحاويات تلقائيًا عند تغيّرsetupCommand(أو إعدادات docker) ما لم تكن الحاوية مستخدمة مؤخرًا (خلال ~5 دقائق). تسجّل الحاويات الساخنة تحذيرًا مع أمرopenclaw sandbox recreate ...الدقيق.
agents.defaults.sandbox.docker:
network، user، pidsLimit، memory، memorySwap، cpus، ulimits،
seccompProfile، apparmorProfile، dns، extraHosts.
متعدد الوكلاء: تجاوز agents.defaults.sandbox.{docker,browser,prune}.* لكل وكيل عبر agents.list[].sandbox.{docker,browser,prune}.*
(يُتجاهل عندما تكون agents.defaults.sandbox.scope / agents.list[].sandbox.scope هي "shared").
بناء صورة sandbox الافتراضية
openclaw-sandbox:bookworm-slim باستخدام Dockerfile.sandbox.
صورة sandbox مشتركة (اختياري)
إذا أردت صورة sandbox تحتوي أدوات بناء شائعة (Node، Go، Rust، إلخ)، فابنِ الصورة المشتركة:openclaw-sandbox-common:bookworm-slim. لاستخدامها:
صورة متصفح sandbox
لتشغيل أداة المتصفح داخل sandbox، ابنِ صورة المتصفح:openclaw-sandbox-browser:bookworm-slim باستخدام
Dockerfile.sandbox-browser. تشغّل الحاوية Chromium مع تمكين CDP
ومراقب noVNC اختياري (واجهة مرئية عبر Xvfb).
ملاحظات:
- الرأسي (Xvfb) يقلل من حجب البوت مقابل بلا رأس.
- يمكن استخدام الوضع دون واجهة عبر ضبط
agents.defaults.sandbox.browser.headless=true. - لا حاجة لبيئة سطح مكتب كاملة (GNOME)؛ يوفر Xvfb العرض.
- عنوان تحكم متصفح sandbox (لأداة
browser) - عنوان noVNC (إن كان مُمكّنًا و headless=false)
browser (وأزِله من
المنع) وإلا ستظل الأداة محظورة.
تنطبق قواعد التنظيف (agents.defaults.sandbox.prune) على حاويات المتصفح أيضًا.
صورة sandbox مخصّصة
ابنِ صورتك الخاصة وأشِر إليها في التهيئة:سياسة الأدوات (سماح/منع)
denyيتغلب علىallow.- إذا كان
allowفارغًا: تتوفر جميع الأدوات (باستثناء المنع). - إذا كان
allowغير فارغ: تتوفر فقط الأدوات ضمنallow(مع طرح المنع).
استراتيجية التنظيف
عقدات:prune.idleHours: إزالة الحاويات غير المستخدمة خلال X ساعات (0 = تعطيل)prune.maxAgeDays: إزالة الحاويات الأقدم من X أيام (0 = تعطيل)
- الاحتفاظ بالجلسات النشطة مع تحديد العمر:
idleHours: 24،maxAgeDays: 7 - عدم التنظيف مطلقًا:
idleHours: 0،maxAgeDays: 0
ملاحظات أمنية
- الجدار الصلب ينطبق فقط على الأدوات (exec/read/write/edit/apply_patch).
- أدوات المضيف فقط مثل browser/camera/canvas محظورة افتراضيًا.
- السماح بـ
browserداخل sandbox يكسر العزل (يعمل المتصفح على المضيف).
استكشاف الأخطاء وإصلاحها
- الصورة مفقودة: ابنِها باستخدام
scripts/sandbox-setup.shأو اضبطagents.defaults.sandbox.docker.image. - الحاوية لا تعمل: ستُنشأ تلقائيًا لكل جلسة عند الطلب.
- أخطاء أذونات داخل sandbox: اضبط
docker.userإلى UID:GID يطابق ملكية مساحة العمل المُثبتة (أو غيّر ملكية مجلد مساحة العمل). - لم تُعثر على أدوات مخصّصة: يشغّل OpenClaw الأوامر باستخدام
sh -lc(قشرة تسجيل دخول)، والتي تُصدِر/etc/profileوقد تعيد ضبط PATH. اضبطdocker.env.PATHلإضافة مسارات أدواتك المخصّصة (مثل/custom/bin:/usr/local/share/npm-global/bin)، أو أضِف سكربتًا تحت/etc/profile.d/في Dockerfile الخاص بك.