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ștesh. - 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.