Skip to content
Esta página foi traduzida com IA e pode conter imprecisões. Ajude a melhorar no GitHub.

API de gerenciamento do Docker ​

Prefixo /api/docker, JSON. Os erros são sempre retornados como {"error":"..."}. Todos os endpoints de escrita exigem Content-Type: application/json (exceto envios de arquivos). Operações demoradas (baixar/enviar/compilar imagens, compose up etc.) retornam {"task":"<taskId>"}; consulte /tasks/{id} para acompanhar o progresso.

Sistema e configurações ​

MétodoCaminhoDescrição
GET/info{version,apiVersion,os,arch,kernel,name,cpus,memTotal,storageDriver,rootDir,containers:{total,running,paused,stopped},images,composeCli:bool,composeCliVersion,daemonMirrors:string[]}
GET/disk-usage{images:{count,size,reclaimable},containers:{count,size,reclaimable},volumes:{count,size,reclaimable},buildCache:{count,size,reclaimable}}
POST/prune`{target:"containers"
GET/PUT/settings{host, mirrors:string[], registries:[{server,username,password}], autoCheckHours:number}. O GET retorna registries[].password como "******"; quando o PUT recebe "******", o valor existente é mantido
GET/tasksLista de tarefas (sem as linhas)
GET/tasks/{id}Detalhes da tarefa `{id,kind,title,status:"running"
DELETE/tasksLimpa as tarefas concluídas
GET/logsLog de operações do módulo (já existente)

Contêineres ​

ContainerView (item da lista; os campos existentes são mantidos) ganha: imageId, networks:string[], mounts:number e started (RFC3339, presente só enquanto o contêiner está em execução).

MétodoCaminhoDescrição
GET/containersLista (incluindo contêineres parados)
GET/containers/{id}Detalhes; veja ContainerDetail abaixo
POST/containersCria; veja ContainerSpec para o corpo. Com pull:true, a imagem é baixada antes se não existir; autoStart inicia o contêiner após a criação; retorna {id}
POST/containers/{id}/editRecria o contêiner a partir de um ContainerSpec (mesmo fluxo de reversão da atualização); retorna {id}
POST/containers/{id}/{action}action ∈ start stop restart pause unpause kill
DELETE/containers/{id}?volumes=1Exclusão forçada; volumes=1 também exclui os volumes anônimos
POST/containers/{id}/rename{name}
POST/containers/{id}/commit{repo,tag,comment,pause?:bool} → {id}
GET/containers/{id}/logs?tail=300&timestamps=1{logs} (já existente; adiciona o parâmetro timestamps, padrão 1)
GET/containers/{id}/statsAmostra única {cpuPercent,memUsage,memLimit,memPercent,netRx,netTx,blockRead,blockWrite,pids}
GET/containers/{id}/processes{titles:string[],processes:string[][]}
GET/containers/{id}/execWebSocket. Parâmetros de query: cmd (padrão /bin/sh; pode conter argumentos separados por espaço), cols, rows, user. O protocolo é o mesmo do Terminal Web: o cliente envia JSON em texto {"t":"i","d":"input"} / {"t":"r","c":cols,"r":rows}, e o servidor envia a saída em binário; mensagens de erro são enviadas como texto {"d":"..."}. Recusado se o contêiner não estiver em execução
POST/containers/check-allVerifica uma a uma as atualizações de imagem de todos os contêineres em execução (uma tarefa); retorna {task}; os resultados são gravados no campo update de cada contêiner
POST/containers/{id}/check /upgradeJá existentes; sem alterações
POST/containers/upgrade-batch{ids:string[]} atualiza os contêineres em sequência (uma tarefa); retorna {task}

Arquivos do contêiner ​

Todos os caminhos são absolutos dentro do contêiner, implementados pela API de archive do Engine.

MétodoCaminhoDescrição
GET/containers/{id}/files/list?path=/[{name,path,dir:bool,size,mode,modified,link?:string}]; diretórios primeiro, depois ordenados por nome
GET/containers/{id}/files/read?path={content,size,truncated}; somente texto, no máximo 1MiB; arquivos binários retornam 400
GET/containers/{id}/files/download?path=Arquivos são baixados diretamente; diretórios são empacotados como tar.gz
POST/containers/{id}/files/write{path,content} sobrescreve o arquivo (mantém as permissões originais; arquivos novos recebem 0644)
POST/containers/{id}/files/mkdir{path}
POST/containers/{id}/files/rename{from,to}
POST/containers/{id}/files/uploadmultipart: campo path (diretório de destino) + file (pode se repetir)
DELETE/containers/{id}/files?path=Exclui (a API de archive não exclui, então isto executa rm -rf via exec; o contêiner precisa estar em execução)

ContainerSpec ​

json
{
  "name": "web",
  "image": "nginx:latest",
  "pull": false,
  "autoStart": true,
  "command": "nginx -g 'daemon off;'",      // string no estilo shell; vazio usa o padrão da imagem
  "entrypoint": "",                         // igual ao anterior
  "env": ["A=1", "B=2"],
  "ports": [{"hostIp":"","host":8080,"container":80,"proto":"tcp"}],
  "volumes": [{"type":"bind","source":"/data","target":"/data","readOnly":false},
              {"type":"volume","source":"myvol","target":"/var/lib/x","readOnly":false}],
  "network": "bridge",                      // nome da rede; "host" / "none" também vão aqui
  "networks": ["extra1"],                   // redes adicionais a conectar
  "ip": "",                                 // IP fixo na rede principal; pode ficar vazio
  "aliases": [],
  "restart": "unless-stopped",              // no / always / unless-stopped / on-failure
  "restartMaxRetries": 0,
  "privileged": false,
  "capAdd": [], "capDrop": [],
  "devices": [{"host":"/dev/ttyUSB0","container":"/dev/ttyUSB0","perm":"rwm"}],
  "user": "", "workdir": "", "hostname": "",
  "dns": [],
  "labels": {"k":"v"},
  "memoryMB": 0, "cpus": 0,                 // 0 significa sem limite
  "tty": false, "stdinOpen": false
}

GET /containers/{id} retorna ContainerDetail: todos os campos de ContainerSpec (usados para preencher o formulário de edição; configurações que não podem ser reconstruídas mantêm os valores originais, e na edição o contêiner é recriado a partir da configuração original, sobrescrevendo apenas os campos presentes no spec), além de id, state, status, created, started, imageId, path, args, mounts:[{type,name,source,destination,rw}], networkDetails:[{name,ip,gateway,mac,aliases}], exitCode, restartCount, healthStatus, composeProject e composeService.

Imagens ​

MétodoCaminhoDescrição
GET/images[{id,tags:string[],digests:string[],size,created,containers:number,dangling:bool}]
GET/images/{id}Detalhes {id,tags,size,created,os,arch,author,cmd,entrypoint,env,exposedPorts,workdir,user,labels,layers:[{createdBy,size,created}]}
POST/images/pull{ref} → {task}; autentica com os registries das configurações. Se o pull falhar e houver mirrors configurados, cada mirror é tentado em sequência e a imagem recebe de novo a tag com o nome original
POST/images/push{ref} → {task}
POST/images/search{term,limit?} → resultados da pesquisa no Docker Hub [{name,description,stars,official}]
POST/images/{id}/tag{repo,tag}
DELETE/images/{id}?force=1Exclui; id também pode ser name:tag (codificado na URL)
POST/images/loadO corpo da requisição é um tar gerado pelo docker save (Content-Type: application/x-tar); retorna {output}
GET/images/{id}/exportBaixa um tar do docker save
POST/images/build{tag, dockerfile?, gitUrl?, buildArgs?:{}}; informe exatamente um entre dockerfile (texto do Dockerfile inline) e gitUrl (contexto remoto); retorna {task}
POST/images/upgrade-checkVerifica todos os contêineres cuja referência de imagem tem atualização; equivale a containers/check-all

Redes ​

MétodoCaminhoDescrição
GET/networks[{id,name,driver,scope,subnet,gateway,internal,ipv6,builtin:bool,containers:[{id,name,ip}]}]
POST/networks{name,driver?:"bridge",subnet?,gateway?,internal?,attachable?,ipv6?} → {id}
DELETE/networks/{id}Exclui
POST/networks/{id}/connect{container,aliases?:[],ip?}
POST/networks/{id}/disconnect{container,force?:bool}

Volumes ​

MétodoCaminhoDescrição
GET/volumes[{name,driver,mountpoint,created,size,refCount,usedBy:[{id,name}],labels}]; o tamanho vem do disk-usage e é -1 quando desconhecido
POST/volumes{name,driver?:"local"}
DELETE/volumes/{name}?force=1Exclui
GET/volumes/{name}/exportEmpacota o volume em um tar.gz para download usando um contêiner auxiliar temporário (alpine, baixado automaticamente se não existir)
POST/volumes/{name}/importO corpo da requisição é um tar.gz (Content-Type: application/gzip), extraído no volume (criado se não existir); retorna {ok:true}

Compose ​

Os projetos são agregados a partir dos labels de contêiner com.docker.compose.project / .service / .project.working_dir / .project.config_files. start / stop / restart / down são executados diretamente pela API do Engine. up / pull / build e a leitura e gravação de arquivos dependem da CLI docker compose e de acesso ao caminho do arquivo compose; quando indisponíveis, retornam 501 com uma mensagem clara.

MétodoCaminhoDescrição
GET/compose/projects`[{name,workingDir,configFiles:string[],status:"running"
POST/compose/projects{name,content} cria um novo projeto (grava compose/<name>/compose.yaml) e executa up; retorna {task}
POST/compose/{project}/{action}action ∈ start stop restart down pause unpause (down aceita ?volumes=1 para também excluir os volumes nomeados)
POST/compose/{project}/updocker compose up -d (?build=1, ?pull=1); retorna {task}
POST/compose/{project}/pullBaixa as imagens do projeto; retorna {task}
GET/compose/{project}/config{path,content,writable}; lê o primeiro arquivo compose
PUT/compose/{project}/config{content} grava o arquivo de volta; com ?apply=1, executa up logo após gravar e retorna {task} (caso contrário, {ok:true})
GET/compose/{project}/logs?tail=300Agrega os logs de todos os contêineres de serviço, prefixando cada linha com `service
DELETE/compose/{project}Somente projetos gerenciados: executa down e depois exclui o diretório do projeto

Fora do escopo ​

Agrupamento e ordenação de contêineres (apenas uma preferência da interface), mirrors de registry no nível do daemon (exigiriam alterar o daemon.json do host; use a configuração de mirrors do próprio Gately) e backups agendados de volumes e projetos Compose (a serem tratados depois pelo módulo de tarefas agendadas).

Distribuído sob a licença Apache-2.0.