docker compose run în Docker

Docker Compose Docker Compose v2

Pornește un container nou pentru o comandă unică (migrare, test, consolă), cu configurația unui serviciu din compose.yaml.

Sintaxă comandă
docker compose run [opțiuni] <serviciu> [comandă] [argumente...]

Ce face docker compose run

docker compose run api npm run migrate creează un container nou din serviciul api, cu aceeași imagine, rețea, volume și variabile de mediu, dar rulează comanda dată în locul celei implicite. Serviciile de care depinde (depends_on) sunt pornite automat, dacă nu rulează deja.

Diferențe importante față de docker compose exec: run pornește un container nou, iar exec intră într-unul care rulează deja. În plus, run nu publică porturile din ports: (ca să nu intre în conflict cu serviciul pornit), decât dacă adaugi --service-ports. Folosește --rm ca să nu rămână containere oprite după fiecare comandă.

Parametri

Parametru Descriere
--rm Șterge containerul după terminarea comenzii.
-e CHEIE=VALOARE Variabilă de mediu suplimentară.
--service-ports Publică porturile definite în serviciu.
--no-deps Nu pornește serviciile din depends_on.
-T Fără pseudo-terminal (pentru scripturi și CI).
--entrypoint Suprascrie ENTRYPOINT-ul imaginii.
-v SURSĂ:DESTINAȚIE Montează un volum suplimentar.

Exemple

Exemplul 1: Migrarea bazei de date

Baza de date pornește automat (dacă nu rula), iar containerul migrării se șterge la final.

docker compose run --rm api npm run migrate

Ieșire în terminal

[+] Creating 1/1
 ✔ Container magazin-db-1  Created                                     0.1s
[+] Running 1/1
 ✔ Container magazin-db-1  Started                                     0.4s

> magazin-api@1.4.0 migrate
> node scripts/migrate.js

Migrare 2026_10_20_adauga_judet ... OK
Migrare 2026_10_22_comenzi_index ... OK

Exemplul 2: Teste în CI, fără terminal și fără dependențe

-T evită eroarea „the input device is not a TTY”, iar codul de ieșire al testelor devine codul comenzii.

docker compose run --rm -T --no-deps -e NODE_ENV=test api npm test
echo "cod de iesire: $?"

Ieșire în terminal

> magazin-api@1.4.0 test
> node --test

✔ calculeaza TVA 21% (1.2ms)
✔ livrare gratuita peste 200 lei (0.4ms)
ℹ tests 2
ℹ pass 2
ℹ fail 0
cod de iesire: 0

Greșeli frecvente

  • Rularea repetată fără --rm: fiecare apel lasă în urmă un container oprit, cu nume ca magazin-api-run-3f2a1b. Le poți curăța cu docker compose rm.
  • Așteptarea ca aplicația pornită cu run să fie accesibilă pe portul din ports:: fără --service-ports, porturile nu sunt publicate.

Comenzi înrudite

  • docker compose build: Construiește (sau reconstruiește) imaginile serviciilor care au secțiunea build în compose.yaml.
  • docker compose restart / stop / start: Repornește, oprește sau pornește containerele existente ale serviciilor, fără să le recreeze și fără să aplice modificări din compose.yaml.