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.

Sandbox Docker compartido
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

El 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.

01

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.
02

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.
03

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.
04

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.