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 camagazin-api-run-3f2a1b. Le poți curăța cudocker compose rm. - Așteptarea ca aplicația pornită cu
runsă fie accesibilă pe portul dinports:: 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.