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.
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-releaseO 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.
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.
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.
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.
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.
Exemplos por provider
Sandbox Docker para harness.run
Crie um runner Codex a partir da imagem base da OpenAI e use CODEX_HOME ou CODEX_API_KEY.
Claude Code no DockerInstale Claude Code em uma imagem Node e passe credenciais Anthropic para um passo.
OpenCode no DockerInstale OpenCode, monte seu diretorio de auth e execute via harness.run.
CLI personalizada no DockerDefina um provider customizado para uma CLI interna ou wrapper script.