Docker sandbox لخطوات harness.run

شغل harness الوكلاء داخل Docker sandbox.

يمكن لـ Dagu تشغيل حاوية Docker لكل DAG run أو لخطوة harness.run واحدة فقط. مسارات mount، متغيرات البيئة، الشبكة، و provider binary كلها تأتي من إعدادات container.

Docker sandbox مشترك
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.

01

نطاق الحاوية

استخدم container على مستوى الجذر عندما تحتاج خطوات command و harness إلى مشاركة الملفات والأدوات. استخدم container على مستوى الخطوة عندما تحتاج محاولة agent واحدة فقط إلى runner image و workspace mount و credential.

  • container على مستوى الجذر يطبق على command steps الموروثة وعلى harness.run المعتمد على CLI.
  • container على مستوى الخطوة يتجاوز container الجذري لهذه الخطوة.
  • يمكن ربط حاوية موجودة بالاسم، لكن image mode أوضح للـ agent runners القابلة لإعادة الإنتاج.
02

وصول الشبكة للوكيل

عادة تحتاج 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` مناسب فقط لأوامر لا تستدعي أي خدمات خارجية؛ وليس مثالا مفيدا لوكلاء مستضافين.
03

بيئة 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 نفسه سيدير حاويات.
04

بيانات الاعتماد

Credentials لا تمرر ضمنيا. أضفها عبر container.env أو اربط مجلد الاعتماد الذي يقرأه provider فعليا. Credentials في root-level container تكون قابلة للقراءة من كل الخطوات الموروثة داخل الحاوية المشتركة.