Sandbox Docker para harness.run
Ejecuta agent harnesses dentro de un sandbox Docker.
Dagu puede iniciar un contenedor Docker para todo el DAG run o solo para un paso harness.run. Montajes, variables de entorno, red y binario del provider se definen explicitamente en 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-releaseEl container raiz comparte filesystem entre pasos command y harness.
El container por paso aisla un intento harness con su propia imagen y montajes.
Docker es el runtime predeterminado cuando DAGU_CONTAINER_RUNTIME no esta definido.
Los ejemplos Alpine verifican la ruta del contenedor sin llamar a un model provider.
Alcance del contenedor
Usa container raiz cuando pasos command y harness deben compartir archivos y herramientas. Usa container por paso cuando solo un intento del agente debe recibir imagen runner, workspace y credencial.
- El container raiz aplica a pasos command heredados y harness.run basado en CLI.
- Un container por paso reemplaza el container raiz en ese paso.
- Se puede adjuntar un contenedor existente, pero image mode es mas claro para runners reproducibles.
Acceso de red del agente
Codex, Claude Code, OpenCode y CLIs similares de agentes alojados normalmente necesitan red saliente para llegar a las APIs del provider. Dagu define el modo de red del contenedor; las reglas de egress se configuran fuera de Dagu con Docker, Podman, firewall o proxy.
- Deja container.network sin definir para usar la red Docker predeterminada, o usa una red custom con el egress necesario.
- Usa redes Docker o Podman, reglas de firewall o variables de proxy para politicas allow/deny.
- `network: none` solo sirve para comandos que nunca llaman servicios externos; no es un ejemplo util para agentes alojados.
Entorno runtime
Configura el container runtime en el proceso Dagu que ejecuta el run: server, scheduler, worker o CLI. Docker se selecciona por defecto y variables Docker como DOCKER_HOST siguen funcionando.
- Usa DAGU_CONTAINER_RUNTIME=docker solo cuando quieras hacerlo explicito.
- Si Dagu corre dentro de Docker, monta el socket Docker solo en workers Dagu confiables.
- El runner del agente no necesita el socket Docker salvo que el propio agente administre contenedores.
Credenciales
Las credenciales no son implicitas. Pasalas con container.env o monta el directorio que el provider realmente lee. Las credenciales en container raiz quedan visibles para todos los pasos heredados en el contenedor compartido.
Ejemplos por provider
Sandbox Docker para harness.run
Construye un runner Codex desde la imagen base de OpenAI y usa CODEX_HOME o CODEX_API_KEY.
Claude Code en DockerInstala Claude Code en una imagen Node y pasa credenciales Anthropic a un solo paso.
OpenCode en DockerInstala OpenCode, monta su directorio de auth y ejecutalo con harness.run.
CLI personalizada en DockerDefine un provider personalizado para una CLI interna o wrapper script.