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 से आते हैं।
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-releaseRoot-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 करते हैं।
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 ज्यादा साफ है।
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 नहीं है।
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 न करे।
Credentials
Credentials implicit नहीं होते। उन्हें container.env से दें या वह credential directory mount करें जिसे provider सच में पढ़ता है। Root-level credentials shared container के हर inherited step से readable होते हैं।
Provider examples
harness.run के लिए Docker sandbox
OpenAI base image से Codex runner बनाएं और CODEX_HOME या CODEX_API_KEY use करें।
Docker में Claude CodeNode image में Claude Code install करें और Anthropic credentials सिर्फ एक step को दें।
Docker में OpenCodeOpenCode install करें, auth directory mount करें और harness.run से चलाएं।
Docker में custom CLIInternal CLI या wrapper script के लिए custom provider define करें।