docker run în Docker

Containere Docker 1.0+

Creează și pornește un container nou dintr-o imagine.

Sintaxă comandă
docker run [opțiuni] imagine [comandă] [argumente...]

Ce face docker run

Comanda docker run creează un container nou dintr-o imagine și îl pornește. Practic combină docker create și docker start; dacă imaginea nu există local, o descarcă automat cu docker pull.

Fără opțiuni, containerul rulează în prim-plan, iar ieșirea lui apare în terminal. Cu -d rulează în fundal și comanda afișează doar ID-ul complet al containerului. Comanda și argumentele de după numele imaginii înlocuiesc instrucțiunea CMD din imagine.

Fiecare docker run creează un container nou. Pentru a reporni un container existent folosește docker start; altfel vei acumula multe containere oprite (vezi docker ps -a).

Opțiuni și argumente

Opțiune / Parametru Descriere
-d, --detach Rulează containerul în fundal și afișează ID-ul lui.
--name nume Dă un nume containerului; altfel Docker generează unul aleator (de exemplu quirky_hopper).
-p gazdă:container Publică un port: -p 8080:80 face portul 80 din container accesibil pe portul 8080 al gazdei.
-e, --env CHEIE=valoare Setează o variabilă de mediu; --env-file .env le citește dintr-un fișier.
-v, --volume sursă:destinație Montează un volum sau un director al gazdei în container.
-it Combinația -i (stdin deschis) și -t (pseudo-terminal), pentru sesiuni interactive.
--rm Șterge automat containerul când se oprește.
--restart politică Politica de repornire: no, on-failure, unless-stopped, always.

Exemple

Exemplul 1: Pornirea unui server Nginx în fundal

Mapăm portul 8080 al gazdei pe portul 80 al containerului. Site-ul devine accesibil la http://localhost:8080.

docker run -d --name web -p 8080:80 --restart unless-stopped nginx:1.27

Ieșire în terminal

9f3c2a1b7e6d4c5b8a9f0e1d2c3b4a5f6e7d8c9b0a1f2e3d4c5b6a7f8e9d0c1b

Exemplul 2: Un shell interactiv temporar

Cu -it --rm obții un shell într-un container care dispare la ieșire, ideal pentru teste rapide.

docker run -it --rm ubuntu:24.04 bash

Ieșire în terminal

root@4b7e2d9c1a3f:/# cat /etc/os-release | head -2
PRETTY_NAME="Ubuntu 24.04.1 LTS"
NAME="Ubuntu"
root@4b7e2d9c1a3f:/# exit
exit

Exemplul 3: Bază de date cu variabile de mediu și volum

Datele PostgreSQL sunt păstrate în volumul numit pgdata, deci supraviețuiesc ștergerii containerului.

docker run -d --name db \
  -e POSTGRES_PASSWORD=secret \
  -e POSTGRES_DB=app \
  -v pgdata:/var/lib/postgresql/data \
  -p 5432:5432 \
  postgres:16

Ieșire în terminal

c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2

Greșeli frecvente

  • Plasarea opțiunilor după numele imaginii: în docker run nginx -p 8080:80, -p 8080:80 este transmis ca argument către Nginx, nu către Docker. Opțiunile Docker se pun înaintea imaginii.
  • Inversarea porturilor: formatul este -p PORT_GAZDĂ:PORT_CONTAINER.
  • Eroarea Conflict. The container name "/web" is already in use: există deja un container (chiar oprit) cu acel nume. Șterge-l cu docker rm web sau pornește-l cu docker start web.

Comenzi înrudite

  • docker ps: Listează containerele care rulează (sau toate, cu -a).
  • docker exec: Rulează o comandă suplimentară într-un container care rulează deja.
  • docker logs: Afișează ieșirea standard (stdout și stderr) a unui container.
  • docker run -v / --mount: Atașează volume, directoare de pe gazdă (bind mounts) sau memorie RAM (tmpfs) la un container.