Sandbox Docker para harness.run

Execute agent harnesses dentro de um sandbox Docker.

O Dagu pode iniciar um container Docker para todo o DAG run ou para apenas um passo harness.run. Montagens, variaveis de ambiente, rede e o binario do provider sao definidos explicitamente em container.

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

O container raiz compartilha o mesmo filesystem entre passos command e harness.

O container por passo isola uma tentativa harness com sua propria imagem e montagens.

Docker e o runtime padrao quando DAGU_CONTAINER_RUNTIME nao esta definido.

Os exemplos Alpine verificam o caminho do container sem chamar um model provider.

01

Escopo do container

Use container raiz quando passos command e harness precisam compartilhar arquivos e ferramentas. Use container por passo quando apenas uma tentativa do agente deve receber uma imagem runner, workspace e credencial.

  • O container raiz se aplica a passos command herdados e a harness.run baseado em CLI.
  • Um container por passo substitui o container raiz naquele passo.
  • Tambem e possivel anexar um container existente, mas image mode e mais claro para runners reproduziveis.
02

Acesso de rede do agente

Codex, Claude Code, OpenCode e CLIs semelhantes de agentes hospedados normalmente precisam de rede de saida para acessar as APIs do provider. O Dagu define o modo de rede do container; regras de egress devem ser configuradas fora do Dagu com Docker, Podman, firewall ou proxy.

  • Deixe container.network vazio para usar a rede Docker padrao, ou defina uma rede customizada com o egress necessario.
  • Use redes Docker ou Podman, regras de firewall ou variaveis de proxy para politica de allow/deny.
  • `network: none` serve apenas para comandos que nunca chamam servicos externos; nao e um exemplo util para agentes hospedados.
03

Ambiente de runtime

Configure o runtime de container no processo Dagu que executa o run: server, scheduler, worker ou CLI. Docker e selecionado por padrao, e variaveis Docker padrao como DOCKER_HOST continuam valendo.

  • Use DAGU_CONTAINER_RUNTIME=docker apenas quando quiser explicitar.
  • Se o proprio Dagu roda em Docker, monte o socket Docker apenas em workers Dagu confiaveis.
  • O container runner do agente nao precisa do socket Docker, a menos que o agente gerencie containers.
04

Credenciais

Credenciais nao sao implicitas. Passe com container.env ou monte o diretorio que o provider realmente le. Credenciais no container raiz ficam visiveis a todos os passos herdados no container compartilhado.