docker compose logs / ps / exec în Docker

Docker Compose Compose v2 (Docker 20.10+)

Inspectează starea serviciilor, urmărește jurnalele și execută comenzi folosind numele serviciului din compose.yaml.

Sintaxă comandă
docker compose ps [opțiuni]
docker compose logs [-f] [--tail N] [serviciu...]
docker compose exec [opțiuni] serviciu comandă

Ce face docker compose logs / ps / exec

Când lucrezi cu un proiect Compose, nu este nevoie să reții numele complete ale containerelor (precum proiect-api-1) pentru a folosi docker logs sau docker exec. Subcomenzile din docker compose operează direct cu numele scurt al serviciului din compose.yaml (de exemplu api sau db) și se limitează automat la proiectul din directorul curent.

docker compose ps îți arată doar containerele proiectului curent și starea lor (inclusiv healthy), docker compose logs -f împletește într-un singur flux colorat jurnalele tuturor serviciilor (sau doar pe cele ale serviciilor indicate), iar docker compose exec deschide un shell sau rulează o comandă într-un serviciu care deja rulează.

Dacă serviciul este oprit sau vrei să rulezi o comandă punctuală într-un container nou și separat (de exemplu o migrare de bază de date sau npm test), folosește docker compose run --rm serviciu comandă.

Opțiuni și argumente

Opțiune / Parametru Descriere
ps [-a] Listează containerele proiectului curent (cu -a le include și pe cele oprite).
logs [-f] [--tail N] [serviciu] Afișează și urmărește în timp real jurnalele tuturor serviciilor sau doar ale celor numite.
exec serviciu comandă Execută o comandă într-un container pornit al serviciului (în Compose v2, -it este activat automat în terminal).
run --rm serviciu comandă Pornește un container nou, temporar, pentru acel serviciu, rulează comanda și îl șterge la final.
restart / stop / start [serviciu] Repornește, oprește sau pornește unul sau toate serviciile proiectului.

Exemple

Exemplul 1: Verificarea stării și urmărirea jurnalelor pentru un serviciu

Vedem ce servicii rulează și urmărim ultimele 20 de linii din jurnalul serviciului api.

docker compose ps
docker compose logs -f --tail 20 api

Ieșire în terminal

NAME            IMAGE          COMMAND                  SERVICE   CREATED          STATUS                    PORTS
proiect-api-1   proiect-api    "docker-entrypoint.s…"   api       12 minutes ago   Up 12 minutes             0.0.0.0:3000->3000/tcp
proiect-db-1    postgres:16    "docker-entrypoint.s…"   db        12 minutes ago   Up 12 minutes (healthy)   5432/tcp
api-1  | [08:20:01] Server pornit pe portul 3000
api-1  | [08:20:14] GET /sanatate 200 4ms

Exemplul 2: Deschiderea clientului psql în serviciul db

Nu avem nevoie de -it explicit: docker compose exec alocă automat un terminal interactiv.

docker compose exec db psql -U postgres -d magazin

Ieșire în terminal

psql (16.4 (Debian 16.4-1.pgdg120+1))
Type "help" for help.

magazin=#

Greșeli frecvente

  • Rularea comenzilor docker compose dintr-un alt director decât cel în care se află compose.yaml: vei primi eroarea no configuration file provided: not found.
  • Folosirea docker compose run fără --rm pentru comenzi repetate (teste, migrări): lasă în urmă zeci de containere oprite (proiect-api-run-1, proiect-api-run-2…).

Comenzi înrudite

  • docker compose up: Construiește imaginile, creează rețeaua și volumele și pornește toate serviciile din compose.yaml.
  • docker compose down: Oprește și șterge containerele și rețeaua create de docker compose up.
  • docker logs: Afișează ieșirea standard (stdout și stderr) a unui container.
  • docker exec: Rulează o comandă suplimentară într-un container care rulează deja.