harness.run के लिए Docker sandbox

Agent harnesses को Docker sandbox के अंदर चलाएं।

Dagu पूरे DAG run के लिए या सिर्फ एक harness.run step के लिए Docker container शुरू कर सकता है। Filesystem mounts, environment variables, network access और provider binary सभी container configuration से आते हैं।

Shared 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

Root-level container command और harness steps के बीच एक filesystem share करता है।

Step-level container एक harness attempt को अपनी image और mounts के साथ isolate करता है।

DAGU_CONTAINER_RUNTIME unset होने पर Docker default runtime है।

Alpine examples model provider को call किए बिना container path verify करते हैं।

01

Container scope

जब command steps और harness steps को files और tools share करने हों, root-level container use करें। जब सिर्फ एक agent attempt को runner image, workspace mount और credential चाहिए, step-level container use करें।

  • Root-level container inherited command steps और CLI-based harness.run steps पर apply होता है।
  • Step-level container उस step के लिए root-level container को override करता है।
  • Existing named container attach किया जा सकता है, लेकिन reproducible agent runners के लिए image mode ज्यादा साफ है।
02

Agent network access

Codex, Claude Code, OpenCode और इसी तरह के hosted agent CLIs को आम तौर पर provider APIs तक पहुंचने के लिए outbound network access चाहिए। Dagu container network mode set करता है; allow या deny egress Docker, Podman, firewall या proxy configuration में Dagu के बाहर configure करें।

  • Default Docker networking के लिए container.network unset रखें, या required egress वाली custom network set करें।
  • Allow/deny policy के लिए Docker या Podman networks, firewall rules, या proxy environment variables use करें।
  • `network: none` केवल उन commands के लिए है जो external services को कभी call नहीं करते; यह hosted-agent example के लिए useful नहीं है।
03

Runtime environment

Container runtime उसी Dagu process पर set करें जो run execute करता है: server, scheduler, worker या CLI। Docker default है, और DOCKER_HOST जैसे standard Docker variables अभी भी apply होते हैं।

  • DAGU_CONTAINER_RUNTIME=docker केवल explicit करना हो तो set करें।
  • अगर Dagu खुद Docker में चलता है, Docker socket सिर्फ trusted Dagu workers में mount करें।
  • Agent runner container को Docker socket नहीं चाहिए, जब तक agent खुद containers manage न करे।
04

Credentials

Credentials implicit नहीं होते। उन्हें container.env से दें या वह credential directory mount करें जिसे provider सच में पढ़ता है। Root-level credentials shared container के हर inherited step से readable होते हैं।