docker exec în Docker

Containere Docker 1.3+

Rulează o comandă suplimentară într-un container care rulează deja.

Sintaxă comandă
docker exec [opțiuni] container comandă [argumente...]

Ce face docker exec

Comanda docker exec pornește un proces nou în interiorul unui container activ, fără a-l reporni. Cel mai des este folosită pentru a deschide un shell (docker exec -it web sh) și a investiga ce se întâmplă înăuntru.

Procesul pornit cu exec nu este procesul principal: când ieși din shell, containerul continuă să ruleze. Comanda funcționează doar pe containere în execuție; pentru unul oprit primești eroarea is not running.

Multe imagini minimale (Alpine, distroless) nu conțin bash. Încearcă sh, iar dacă nici acesta nu există, folosește docker cp sau docker debug (Docker Desktop).

Opțiuni și argumente

Opțiune / Parametru Descriere
-it Sesiune interactivă cu terminal; necesară pentru shell-uri.
-u, --user Rulează comanda ca alt utilizator, de exemplu -u root sau -u 1000:1000.
-w, --workdir Directorul de lucru în care rulează comanda.
-e, --env Variabile de mediu suplimentare doar pentru această comandă.
-d, --detach Rulează comanda în fundal.
--privileged Acordă privilegii extinse procesului (folosește cu grijă).

Exemple

Exemplul 1: Shell interactiv într-un container Nginx

Verificăm configurația Nginx din interior.

docker exec -it web sh

Ieșire în terminal

# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
# exit

Exemplul 2: Comandă unică într-o bază de date

Rulăm o interogare SQL fără a deschide o sesiune interactivă.

docker exec db psql -U postgres -d app -c "SELECT count(*) FROM users;"

Ieșire în terminal

 count
-------
  1284
(1 row)

Exemplul 3: Rulare ca root

Util când imaginea rulează implicit ca utilizator neprivilegiat și ai nevoie să instalezi temporar un utilitar.

docker exec -it -u root api bash

Ieșire în terminal

root@7a8b9c0d1e2f:/app#

Greșeli frecvente

  • Eroarea OCI runtime exec failed: exec failed: unable to start container process: exec: "bash": executable file not found in $PATH: imaginea nu are bash. Folosește sh.
  • Modificări făcute „la cald” cu exec (pachete instalate, fișiere editate) care se pierd la recrearea containerului. Schimbările permanente se fac în Dockerfile.

Comenzi înrudite

  • docker run: Creează și pornește un container nou dintr-o imagine.
  • docker logs: Afișează ieșirea standard (stdout și stderr) a unui container.
  • docker cp: Copiază fișiere sau directoare între container și sistemul gazdă.
  • docker compose logs / ps / exec: Inspectează starea serviciilor, urmărește jurnalele și execută comenzi folosind numele serviciului din compose.yaml.