runner inspect-args
Imprime o vetor de args que seria passado pro docker run no proximo deploy de uma app, sem executar nada. Read-only — nao toca em state, containers, networks ou imagens.
Adicionado na v2.24.1.
Sintaxe
runner inspect-args <app>
runner inspect-args <app> --instance <name>
runner inspect-args <app> --jsonQuando usar
Util pra validar configuracao antes de pushar pro dist:
- Confirmar que campos novos da v2.24.0 (
resources,security,logging, etc) viram as flags certas do docker - Debug de porque uma app esta rodando com comportamento inesperado (compare args contra
docker inspect) - Pre-flight check antes de deploy em producao
- Validacao em pipelines de CI sem rodar o deploy completo
Comparativo com outros comandos:
| Comando | O que faz |
|---|---|
runner inspect-args |
Imprime args do docker run (read-only) |
runner manifest |
Imprime o .deploy.yml (raw ou resolvido) |
runner validate |
Valida estrutura do manifest, env, version |
runner deploy |
Executa deploy completo |
Argumentos
| Argumento | Tipo | Obrigatorio | Descricao |
|---|---|---|---|
app |
string | Sim | Path do app ou projeto/system |
--instance <name> |
string | Nao | Instance a inspecionar. Default: instance do state file, ou primeira do .deploy.yml |
--json |
bool | Nao | Output como JSON array em vez de linhas legiveis |
Como funciona
O comando le o .deploy.yml da app, constroi o ContainerRunConfig usando o mesmo caminho de codigo que o deploy real usaria, e dumpa o vetor de args.
Internamente reusa a funcao preview_run_args — a mesma que a suite de regressao do runner usa pra lockar goldens. Operador ve exatamente o que o runner emitiria.
Diferenca pro deploy real: nao exercita PortAllocator (portas dinamicas), nao aplica weighted services do Traefik canary, nao puxa configuracao de auto-mount baseada em estado do disco. Para todos os campos declarados explicitamente no .deploy.yml, o output e identico ao deploy real.
Exemplos
Default (instance + version do state)
runner inspect-args meu-apprun
-d
--name meu-app_production_v1-0-4
--restart unless-stopped
-w /app
--network public
--label ccs.systems/instance=production
--label ccs.systems/managed-by=runner
--label ccs.systems/project=meu-app
--label ccs.systems/version=v1.0.4
--label traefik.http.routers.meu-app_production_v1-0-4.rule=Host(`meu-app.com.br`)
meu-app:v1.0.4Com campos novos da v2.24.0
# .deploy.yml
resources:
memory: 256m
cpus: "0.5"
security:
user: nginx
read_only: true
logging:
driver: json-file
options:
max-size: 10mrunner inspect-args meu-apprun
-d
--name meu-app_production_v1-0-4
...
--memory 256m
--cpus 0.5
--user nginx
--read-only
--log-driver json-file
--log-opt max-size=10m
meu-app:v1.0.4Instance especifica
runner inspect-args meu-app --instance stagingUtil pra comparar production vs staging quando configuracao diverge.
JSON output
runner inspect-args meu-app --json[
"run",
"-d",
"--name",
"meu-app_production_v1-0-4",
"--restart",
"unless-stopped",
"..."
]Bom pra alimentar pipeline / diff automatico:
diff <(runner inspect-args meu-app --json) <(runner inspect-args meu-app --json --instance staging)Workflow tipico
- Editar
.deploy.ymllocal com campos novos runner inspect-args meu-app— confirma que as flags certas aparecem- Commit + push pro
dist - Cron faz fetch + deploy
Resolução de placeholders e redação de secrets (v2.32.0+)
A partir da v2.32.0, o inspect-args resolve {{::KEY[?default]}} placeholders dos environment: antes de imprimir. Por default (sem --insecure), secrets sao redactados — operador ve <set>/<empty> no lugar do valor real.
| Estado da key | Sem --insecure |
Com --insecure |
|---|---|---|
Definida em .env (plain) |
Valor verbatim | Valor verbatim |
Definida em .secrets ou bundle decifrado |
<set> |
Valor real |
Ausente + ?default no YAML |
Default literal | Default literal |
| Ausente + sem default | <empty> |
<empty> |
Sem isso (pre-v2.32.0), inspect-args imprimia DB_PASSWORD={{::DB_PASSWORD}} literal — operador nao distinguia "nao setado" de "redactado" e re-rodava env set achando que tinha falhado.
Exemplo prático:
# .deploy.yml
environment:
NODE_ENV: "{{::NODE_ENV?production}}"
BASE_DOMAIN: "{{::BASE_DOMAIN}}"
DB_PASSWORD: "{{::DB_PASSWORD}}"$ runner inspect-args meu-app
-e NODE_ENV=production # default literal do YAML
-e BASE_DOMAIN=meu-app.com.br # valor do .env (plaintext)
-e DB_PASSWORD=<set> # redactado
$ runner --insecure inspect-args meu-app
-e NODE_ENV=production
-e BASE_DOMAIN=meu-app.com.br
-e DB_PASSWORD=s3cr3t-real-value # mostrado por --insecureA flag --insecure reusa o mesmo flag global de runner ckeys reveal, runner tokens reveal, runner add --insecure etc. — banner de aviso + audit log em /opt/runner/logs/insecure-events.jsonl.
Auto-propagation de NEXT_PUBLIC_* (v2.32.0+)
Keys em build.args: cujo nome bate com prefixo publico conhecido — NEXT_PUBLIC_, VITE_, REACT_APP_, NUXT_PUBLIC_, EXPO_PUBLIC_, PUBLIC_ — aparecem automaticamente no output do inspect-args como -e KEY=VAL, mesmo se nao declaradas em environment:. Veja manifest schema para detalhes.
Limitacoes
- Portas dinamicas: o comando emite
-papenas pras portas declaradas emports:do manifest. Portas alocadas pelo PortAllocator (publish_strategy: random) sao decididas em deploy-time e nao aparecem aqui. - Auto-mount de
data/,logs/,keys/: nao exercitado. So volumes declarados emvolumes:aparecem. - Weighted services do Traefik canary: nao aparecem (sao escritos no dynamic config do Traefik, nao como flag do
docker run). - Entrypoint multi-arg: o primeiro elemento vai em
--entrypoint, o resto aparece depois da image no output (convencao docker: entrypoint + cmd-style args).
Exit codes
| Code | Significado |
|---|---|
0 |
Sucesso, args impressos |
1 |
App nao encontrada, .deploy.yml invalido, ou instance inexistente |
Veja tambem
- `runner manifest` — preview do
.deploy.yml - `runner validate` — validacao estrutural
- `runner deploy` — deploy real
- Reference `.deploy.yml` — todos os campos