Docker sandbox لخطوات harness.run
شغل harness الوكلاء داخل Docker sandbox.
يمكن لـ Dagu تشغيل حاوية Docker لكل DAG run أو لخطوة harness.run واحدة فقط. مسارات mount، متغيرات البيئة، الشبكة، و provider binary كلها تأتي من إعدادات container.
type: graph
container:
image: alpine:3.20
pull_policy: missing
working_dir: /workspace
volumes:
- .:/workspace
env:
- SMOKE_TOKEN=container-env-ok
harnesses:
shell:
binary: sh
prefix_args:
- -c
prompt_mode: arg
steps:
- id: write_file
run: echo "from command step" > shared.txt
- id: read_file
action: harness.run
with:
provider: shell
prompt: |
set -eu
cat shared.txt
echo "SMOKE_TOKEN=$SMOKE_TOKEN"
cat /etc/alpine-releaseالحاوية على مستوى الجذر تشارك filesystem واحدا بين خطوات command و harness.
الحاوية على مستوى الخطوة تعزل محاولة harness واحدة بصورة و mounts خاصة بها.
Docker هو runtime الافتراضي عندما لا يكون DAGU_CONTAINER_RUNTIME مضبوطا.
أمثلة Alpine تتحقق من مسار الحاوية بدون استدعاء model provider.
نطاق الحاوية
استخدم container على مستوى الجذر عندما تحتاج خطوات command و harness إلى مشاركة الملفات والأدوات. استخدم container على مستوى الخطوة عندما تحتاج محاولة agent واحدة فقط إلى runner image و workspace mount و credential.
- container على مستوى الجذر يطبق على command steps الموروثة وعلى harness.run المعتمد على CLI.
- container على مستوى الخطوة يتجاوز container الجذري لهذه الخطوة.
- يمكن ربط حاوية موجودة بالاسم، لكن image mode أوضح للـ agent runners القابلة لإعادة الإنتاج.
وصول الشبكة للوكيل
عادة تحتاج Codex و Claude Code و OpenCode وأدوات agent المستضافة المشابهة إلى outbound network للوصول إلى provider APIs. يضبط Dagu وضع شبكة الحاوية؛ أما السماح أو المنع للـ egress فيتم خارج Dagu عبر Docker أو Podman أو firewall أو proxy.
- اترك container.network غير مضبوط لاستخدام شبكة Docker الافتراضية، أو حدد شبكة مخصصة لديها egress المطلوب.
- استخدم شبكات Docker أو Podman أو قواعد firewall أو متغيرات proxy لسياسة السماح/المنع.
- `network: none` مناسب فقط لأوامر لا تستدعي أي خدمات خارجية؛ وليس مثالا مفيدا لوكلاء مستضافين.
بيئة runtime
اضبط container runtime على عملية Dagu التي تنفذ run: server أو scheduler أو worker أو CLI. Docker مختار افتراضيا، ومتغيرات Docker القياسية مثل DOCKER_HOST ما زالت تعمل.
- استخدم DAGU_CONTAINER_RUNTIME=docker فقط عندما تريد التصريح بذلك.
- إذا كان Dagu نفسه يعمل داخل Docker، فاربط Docker socket فقط مع Dagu workers موثوقين.
- حاوية agent runner لا تحتاج Docker socket إلا إذا كان agent نفسه سيدير حاويات.
بيانات الاعتماد
Credentials لا تمرر ضمنيا. أضفها عبر container.env أو اربط مجلد الاعتماد الذي يقرأه provider فعليا. Credentials في root-level container تكون قابلة للقراءة من كل الخطوات الموروثة داخل الحاوية المشتركة.
أمثلة provider
Docker sandbox لخطوات harness.run
ابن runner لـ Codex من صورة OpenAI الأساسية واستخدم CODEX_HOME أو CODEX_API_KEY.
Claude Code داخل Dockerثبت Claude Code في صورة Node ومرر Anthropic credentials إلى خطوة واحدة.
OpenCode داخل Dockerثبت OpenCode، اربط مجلد auth، وشغله عبر harness.run.
CLI مخصص داخل Dockerعرف provider مخصصا لـ CLI داخلي أو wrapper script.