Skip to main content

Docker (اختياري)

Docker اختياري. استخدمه فقط إذا كنت تريد Gateway مُحَوْسَبًا بالحاويات أو للتحقق من مسار Docker.

هل Docker مناسب لي؟

  • نعم: تريد بيئة Gateway معزولة وسهلة الاستبدال، أو تشغيل OpenClaw على مضيف دون تثبيتات محلية.
  • لا: تعمل على جهازك الشخصي وتريد أسرع دورة تطوير. استخدم مسار التثبيت العادي بدلًا من ذلك.
  • ملاحظة sandboxing: يستخدم sandboxing الخاص بالوكيل Docker أيضًا، لكنه لا يتطلب تشغيل Gateway بالكامل داخل Docker. راجع Sandboxing.
يغطي هذا الدليل:
  • Gateway مُحَوْسَب بالحاويات (OpenClaw كامل داخل Docker)
  • Sandbox وكيل لكل جلسة (Gateway على المضيف + أدوات وكيل معزولة بـ Docker)
تفاصيل sandboxing: Sandboxing

المتطلبات

  • 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
تشغيل على VPS؟ تشغيل على VPS؟ تعمل على VPS؟ راجع Hetzner (Docker VPS).

مساعدات Shell (اختياري)

لتسهيل إدارة Docker اليومية، ثبّت ClawDock:
أضف إلى إعدادات shell الخاصة بك (zsh):
ثم استخدم 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»، فاحصل على رابط لوحة معلومات جديد ووافق جهاز المتصفح:
تفاصيل إضافية: Dashboard، Devices.

ربطات إضافية (اختياري)

إذا أردت ربط أدلة إضافية من المضيف داخل الحاويات، فاضبط 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
إذا أردت حاوية أكثر اكتمالًا، فاستخدم مفاتيح الاشتراك هذه:
  1. الإبقاء على /home/node بحيث تبقى تنزيلات المتصفح ومخابئ الأدوات:
  1. خبز تبعيات النظام داخل الصورة (قابل للتكرار + دائم):
  1. تثبيت متصفحات Playwright دون npx (يتجنب تعارضات تجاوز npm):
إذا احتجت Playwright لتثبيت تبعيات النظام، فأعد بناء الصورة باستخدام OPENCLAW_DOCKER_APT_PACKAGES بدل استخدام --with-deps أثناء التشغيل.
  1. الإبقاء على تنزيلات متصفح 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):
إذا اخترت التشغيل كمستخدم root للتسهيل، فإنك تقبل المفاضلة الأمنية.

إعادة بناء أسرع (موصى به)

لتسريع إعادة البناء، رتّب Dockerfile بحيث تُخزَّن طبقات التبعيات مؤقتًا. هذا يتجنب إعادة تشغيل pnpm install ما لم تتغير ملفات القفل:

إعداد القنوات (اختياري)

استخدم حاوية CLI لتهيئة القنوات، ثم أعد تشغيل Gateway إذا لزم الأمر. WhatsApp (رمز QR):
Telegram (رمز البوت):
Discord (رمز البوت):
الوثائق: WhatsApp، Telegram، Discord

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 واحد:
  • وصول كامل (وكيل شخصي)
  • أدوات للقراءة فقط + مساحة عمل للقراءة فقط (وكيل عائلة/عمل)
  • بدون أدوات نظام ملفات/قشرة (وكيل عام)
راجع 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 افتراضيًا (اشترك صراحة إذا احتجت الخروج)
  • السماح الافتراضي: 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 الخاص بك.