الانتقال إلى المحتوى الرئيسي

Docker (اختياري)

Docker اختياري. استخدمه فقط إذا كنت تريد Gateway داخل حاوية أو للتحقق من تدفق Docker.

هل Docker مناسب لي؟

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

المتطلبات الأساسية

  • Docker Desktop (أو Docker Engine) + Docker Compose v2
  • ما لا يقل عن 2 GB RAM لبناء الصورة (pnpm install قد يُنهى بسبب OOM على المضيفات ذات 1 GB مع الخروج 137)
  • مساحة قرص كافية للصور والسجلات
  • إذا كنت تشغّل التطبيق على VPS/مضيف عام، فراجع تقوية الأمان للتعرض الشبكي، وخاصة سياسة جدار الحماية DOCKER-USER في Docker.

Gateway داخل حاوية

1

بناء الصورة

من جذر المستودع، شغّل نص الإعداد:
./scripts/docker/setup.sh
هذا يبني صورة gateway محليًا. لاستخدام صورة مبنية مسبقًا بدلًا من ذلك:
export OPENCLAW_IMAGE="ghcr.io/openclaw/openclaw:latest"
./scripts/docker/setup.sh
تُنشر الصور المبنية مسبقًا في GitHub Container Registry. الوسوم الشائعة: main, latest, <version> (مثل 2026.2.26).
2

إكمال التهيئة الأولية

يشغّل نص الإعداد التهيئة الأولية تلقائيًا. وسيقوم بما يلي:
  • طلب مفاتيح API الخاصة بالمزوّد
  • إنشاء رمز gateway وكتابته إلى .env
  • بدء gateway عبر Docker Compose
أثناء الإعداد، تعمل التهيئة الأولية قبل البدء وعمليات كتابة التكوين من خلال openclaw-gateway مباشرةً. أمّا openclaw-cli فهي للأوامر التي تشغّلها بعد أن تصبح حاوية gateway موجودة بالفعل.
3

فتح Control UI

افتح http://127.0.0.1:18789/ في متصفحك والصق السر المشترك المكوَّن في Settings. يكتب نص الإعداد رمزًا إلى .env افتراضيًا؛ وإذا بدّلت تكوين الحاوية إلى مصادقة كلمة المرور، فاستخدم كلمة المرور تلك بدلًا من ذلك.هل تحتاج إلى عنوان URL مرة أخرى؟
docker compose run --rm openclaw-cli dashboard --no-open
4

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

استخدم حاوية 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

التدفق اليدوي

إذا كنت تفضّل تشغيل كل خطوة بنفسك بدلًا من استخدام نص الإعداد:
docker build -t openclaw:local -f Dockerfile .
docker compose run --rm --no-deps --entrypoint node openclaw-gateway \
  dist/index.js onboard --mode local --no-install-daemon
docker compose run --rm --no-deps --entrypoint node openclaw-gateway \
  dist/index.js config set gateway.mode local
docker compose run --rm --no-deps --entrypoint node openclaw-gateway \
  dist/index.js config set gateway.bind lan
docker compose run --rm --no-deps --entrypoint node openclaw-gateway \
  dist/index.js config set gateway.controlUi.allowedOrigins \
  '["http://localhost:18789","http://127.0.0.1:18789"]' --strict-json
docker compose up -d openclaw-gateway
شغّل docker compose من جذر المستودع. إذا فعّلت OPENCLAW_EXTRA_MOUNTS أو OPENCLAW_HOME_VOLUME، فسيكتب نص الإعداد الملف docker-compose.extra.yml؛ ضمّنه مع -f docker-compose.yml -f docker-compose.extra.yml.
نظرًا لأن openclaw-cli تشارك مساحة أسماء الشبكة الخاصة بـ openclaw-gateway، فهي أداة لما بعد البدء. قبل docker compose up -d openclaw-gateway، شغّل التهيئة الأولية وعمليات كتابة التكوين وقت الإعداد من خلال openclaw-gateway باستخدام --no-deps --entrypoint node.

متغيرات البيئة

يقبل نص الإعداد متغيرات البيئة الاختيارية التالية:
المتغيرالغرض
OPENCLAW_IMAGEاستخدام صورة بعيدة بدلًا من البناء محليًا
OPENCLAW_DOCKER_APT_PACKAGESتثبيت حزم apt إضافية أثناء البناء (أسماء مفصولة بمسافات)
OPENCLAW_EXTENSIONSتثبيت تبعيات extension مسبقًا وقت البناء (أسماء مفصولة بمسافات)
OPENCLAW_EXTRA_MOUNTSbind mounts إضافية من المضيف (مفصولة بفواصل source:target[:opts])
OPENCLAW_HOME_VOLUMEحفظ /home/node في Docker volume مسماة
OPENCLAW_SANDBOXالاشتراك في bootstrap الخاص بـ sandbox (1, true, yes, on)
OPENCLAW_DOCKER_SOCKETتجاوز مسار Docker socket

فحوصات الصحة

نقاط نهاية probe الخاصة بالحاوية (لا تتطلب مصادقة):
curl -fsS http://127.0.0.1:18789/healthz   # liveness
curl -fsS http://127.0.0.1:18789/readyz     # readiness
تتضمن صورة Docker ‏HEALTHCHECK مضمّنًا يجري ping إلى /healthz. إذا استمرت الفحوصات في الفشل، يضع Docker علامة unhealthy على الحاوية، ويمكن لأنظمة orchestration إعادة تشغيلها أو استبدالها. لقطة صحة عميقة مع مصادقة:
docker compose exec openclaw-gateway node dist/index.js health --token "$OPENCLAW_GATEWAY_TOKEN"

LAN مقابل loopback

يضبط scripts/docker/setup.sh القيمة الافتراضية OPENCLAW_GATEWAY_BIND=lan بحيث يعمل وصول المضيف إلى http://127.0.0.1:18789 مع نشر منافذ Docker.
  • lan (الافتراضي): يمكن لمتصفح المضيف وCLI على المضيف الوصول إلى منفذ gateway المنشور.
  • loopback: لا يمكن إلا للعمليات داخل مساحة أسماء شبكة الحاوية الوصول إلى gateway مباشرة.
استخدم قيم وضع الربط في gateway.bind (lan / loopback / custom / tailnet / auto)، وليس الأسماء المستعارة للمضيف مثل 0.0.0.0 أو 127.0.0.1.

التخزين والاستمرارية

يقوم Docker Compose بعمل bind-mount لـ OPENCLAW_CONFIG_DIR إلى /home/node/.openclaw و OPENCLAW_WORKSPACE_DIR إلى /home/node/.openclaw/workspace، لذا فإن هذه المسارات تبقى بعد استبدال الحاوية. ودليل التكوين المركّب هذا هو المكان الذي يحتفظ فيه OpenClaw بما يلي:
  • openclaw.json لتكوين السلوك
  • agents/<agentId>/agent/auth-profiles.json للمصادقة المخزنة للمزوّدين عبر OAuth/API-key
  • .env للأسرار وقت التشغيل المدعومة بـ env مثل OPENCLAW_GATEWAY_TOKEN
للحصول على تفاصيل الاستمرارية الكاملة في عمليات النشر على VM، راجع Docker VM Runtime - What persists where. النقاط الساخنة لنمو القرص: راقب media/ وملفات JSONL الخاصة بالجلسات وcron/runs/*.jsonl، وسجلات الملفات الدوّارة تحت /tmp/openclaw/.

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

لتسهيل الإدارة اليومية لـ Docker، ثبّت ClawDock:
mkdir -p ~/.clawdock && curl -sL https://raw.githubusercontent.com/openclaw/openclaw/main/scripts/clawdock/clawdock-helpers.sh -o ~/.clawdock/clawdock-helpers.sh
echo 'source ~/.clawdock/clawdock-helpers.sh' >> ~/.zshrc && source ~/.zshrc
إذا كنت قد ثبّتت ClawDock من المسار الخام الأقدم scripts/shell-helpers/clawdock-helpers.sh، فأعد تشغيل أمر التثبيت أعلاه حتى يتتبع ملف المساعد المحلي الموقع الجديد. بعد ذلك استخدم clawdock-start وclawdock-stop وclawdock-dashboard وغيرها. شغّل clawdock-help لجميع الأوامر. راجع ClawDock للحصول على دليل المساعد الكامل.
export OPENCLAW_SANDBOX=1
./scripts/docker/setup.sh
مسار socket مخصص (مثل Docker بدون root):
export OPENCLAW_SANDBOX=1
export OPENCLAW_DOCKER_SOCKET=/run/user/1000/docker.sock
./scripts/docker/setup.sh
يقوم النص بتركيب docker.sock فقط بعد نجاح متطلبات sandbox الأساسية. وإذا تعذّر إكمال إعداد sandbox، يعيد النص ضبط agents.defaults.sandbox.mode إلى off.
عطّل تخصيص Compose pseudo-TTY باستخدام -T:
docker compose run -T --rm openclaw-cli gateway probe
docker compose run -T --rm openclaw-cli devices list --json
تستخدم openclaw-cli القيمة network_mode: "service:openclaw-gateway" حتى تتمكن أوامر CLI من الوصول إلى gateway عبر 127.0.0.1. تعامل مع هذا كحد ثقة مشترك. يسقط تكوين compose الصلاحيتين NET_RAW/NET_ADMIN ويفعل no-new-privileges على openclaw-cli.
تعمل الصورة كمستخدم node ‏(uid 1000). إذا رأيت أخطاء أذونات على /home/node/.openclaw، فتأكد من أن bind mounts على المضيف مملوكة لـ uid 1000:
sudo chown -R 1000:1000 /path/to/openclaw-config /path/to/openclaw-workspace
رتّب Dockerfile بحيث تكون طبقات التبعيات مخزنة مؤقتًا. هذا يتجنب إعادة تشغيل pnpm install ما لم تتغير lockfiles:
FROM node:24-bookworm
RUN curl -fsSL https://bun.sh/install | bash
ENV PATH="/root/.bun/bin:${PATH}"
RUN corepack enable
WORKDIR /app
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"]
الصورة الافتراضية تركّز على الأمان وتعمل كمستخدم node غير root. وللحصول على حاوية أكثر اكتمالًا في الميزات:
  1. الاحتفاظ بـ /home/node: ‏export OPENCLAW_HOME_VOLUME="openclaw_home"
  2. إدراج تبعيات النظام ضمن الصورة: ‏export OPENCLAW_DOCKER_APT_PACKAGES="git curl jq"
  3. تثبيت متصفحات Playwright:
    docker compose run --rm openclaw-cli \
      node /app/node_modules/playwright-core/cli.js install chromium
    
  4. الاحتفاظ بتنزيلات المتصفح: اضبط PLAYWRIGHT_BROWSERS_PATH=/home/node/.cache/ms-playwright واستخدم OPENCLAW_HOME_VOLUME أو OPENCLAW_EXTRA_MOUNTS.
إذا اخترت OpenAI Codex OAuth في المعالج، فسيفتح عنوان URL في المتصفح. في إعدادات Docker أو الإعدادات بدون واجهة، انسخ عنوان URL الكامل لإعادة التوجيه الذي تصل إليه والصقه مرة أخرى في المعالج لإكمال المصادقة.
تستخدم صورة Docker الرئيسية node:24-bookworm وتنشر تعليقات توضيحية خاصة بصورة OCI الأساسية بما في ذلك org.opencontainers.image.base.name, وorg.opencontainers.image.source، وغيرها. راجع OCI image annotations.

التشغيل على VPS؟

راجع Hetzner (Docker VPS) و Docker VM Runtime لخطوات نشر VM المشتركة بما في ذلك إدراج binaries في الصورة، والاستمرارية، والتحديثات.

Agent Sandbox

عندما تكون agents.defaults.sandbox مفعلة، تشغّل gateway تنفيذ أدوات الوكيل (shell وقراءة/كتابة الملفات، وما إلى ذلك) داخل حاويات Docker معزولة بينما تبقى gateway نفسها على المضيف. يوفّر لك هذا حاجزًا صلبًا حول جلسات الوكيل غير الموثوقة أو متعددة المستأجرين من دون وضع gateway بالكامل داخل حاوية. يمكن أن يكون نطاق sandbox لكل وكيل (الافتراضي)، أو لكل جلسة، أو مشتركًا. ويحصل كل نطاق على مساحة العمل الخاصة به مركّبة عند /workspace. ويمكنك أيضًا تكوين سياسات السماح/المنع للأدوات، وعزل الشبكة، وحدود الموارد، وحاويات المتصفح. للاطلاع على التكوين الكامل، والصور، والملاحظات الأمنية، وملفات الوكلاء المتعددة، راجع:

تمكين سريع

{
  agents: {
    defaults: {
      sandbox: {
        mode: "non-main", // off | non-main | all
        scope: "agent", // session | agent | shared
      },
    },
  },
}
ابنِ صورة sandbox الافتراضية:
scripts/sandbox-setup.sh

استكشاف الأخطاء وإصلاحها

ابنِ صورة sandbox باستخدام scripts/sandbox-setup.sh أو اضبط agents.defaults.sandbox.docker.image على صورتك المخصصة. تُنشأ الحاويات تلقائيًا لكل جلسة عند الطلب.
اضبط docker.user على UID:GID يطابق ملكية مساحة العمل المركّبة لديك، أو غيّر ملكية مجلد مساحة العمل.
يشغّل OpenClaw الأوامر باستخدام sh -lc (login shell)، والتي تستورد /etc/profile وقد تعيد ضبط PATH. اضبط docker.env.PATH لإضافة مسارات أدواتك المخصصة في البداية، أو أضف script تحت /etc/profile.d/ في Dockerfile لديك.
تحتاج VM إلى 2 GB RAM على الأقل. استخدم فئة جهاز أكبر ثم أعد المحاولة.
اجلب رابط dashboard جديدًا ووافق على جهاز المتصفح:
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>
تفاصيل أكثر: Dashboard، Devices.
أعد ضبط وضع gateway والربط:
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

ذو صلة