delonix serve docker-api

Fatia da API Docker Engine, num socket unix — ciclo de vida completo de um container, não só leitura.

A slice of the Docker Engine API, on a unix socket — full container lifecycle, not just reads.

Serve o suficiente da API real do Docker Engine (protocolo capturado ao vivo contra um docker CLI real, versão negociada via o header Api-Version da resposta ao /_ping) para docker version/ps/images/ info apontados via DOCKER_HOST=unix://<socket> funcionarem contra o estado REAL do delonix. Desde a v0.26.0, também o ciclo de vida completo de um container — POST /containers/create|start|stop|kill|wait|restart|rename, DELETE /containers/{id}, GET /containers/{id}/json — todos a delegar nas mesmas funções do CLI (cmd_run/cmd_stop/cmd_kill/...), zero lógica duplicada; é o suficiente para docker compose up apontado a este socket funcionar. Mesma postura de segurança do socket de gestão: 0600 + SO_PEERCRED (só o próprio utilizador). Fora de escopo: exec/attach interactivo (HTTP hijacking) e --restart (precisa de um supervisor fork() cru, recusado com erro claro); qualquer rota não implementada dá 404 claro.

Serves enough of the real Docker Engine API (protocol captured live against a real docker CLI, version negotiated via the Api-Version header on the /_ping response) for docker version/ps/images/ info pointed at DOCKER_HOST=unix://<socket> to work against delonix's REAL state. Since v0.26.0, also the full container lifecycle — POST /containers/create|start|stop|kill|wait|restart|rename, DELETE /containers/{id}, GET /containers/{id}/json — all delegating to the same CLI functions (cmd_run/cmd_stop/cmd_kill/...), zero duplicated logic; enough for docker compose up pointed at this socket to work. Same security posture as the management socket: 0600 + SO_PEERCRED (owner only). Out of scope: interactive exec/attach (HTTP hijacking) and --restart (needs a raw fork() supervisor, refused with a clear error); any unimplemented route gives a clear 404.

Usage: dlx serve docker-api [OPTIONS]

Options:
      --addr <ADDR>   Socket address (default: `$DELONIX_DOCKER_ADDR` or `unix:///run/delonix-docker.sock`)
      --l18n <en|pt>  Output language: `en` (default) or `pt` (Portuguese, pt_AO). Also settable via `$DELONIX_L18N`. Global — works before any subcommand
      --matrix        Print the coverage matrix and exit, without serving anything. This layer is a SLICE of the Docker API, and third-party tooling deserves to know where it ends before it hits a 404 mid-run
  -h, --help          Print help

Exemplos

Servir no socket por omissão
delonix serve docker-api &
Um `docker` real a falar com o delonix
DOCKER_HOST=unix:///run/delonix-docker.sock docker ps
`docker compose up` apontado ao delonix
DOCKER_HOST=unix:///run/delonix-docker.sock docker compose up -d

LaboratórioLab

Aponta o próprio docker CLI para o delonix, sem Docker Desktop nenhum instalado.

delonix serve docker-api --addr unix:///tmp/delonix.sock &
DOCKER_HOST=unix:///tmp/delonix.sock docker ps
DOCKER_HOST=unix:///tmp/delonix.sock docker run -d --name web nginx

Point the real docker CLI at delonix, with no Docker Desktop installed at all.

delonix serve docker-api --addr unix:///tmp/delonix.sock &
DOCKER_HOST=unix:///tmp/delonix.sock docker ps
DOCKER_HOST=unix:///tmp/delonix.sock docker run -d --name web nginx

DesafioChallenge

Aponta um docker-compose.yml real para o mesmo socket (DOCKER_HOST=unix://... docker compose up) e confirma que funciona de ponta a ponta contra o delonix.

Point a real docker-compose.yml at the same socket (DOCKER_HOST=unix://... docker compose up) and confirm it works end to end against delonix.