docker network în Docker

Volume și rețele Docker 1.9+

Gestionează rețelele virtuale prin care containerele comunică între ele și cu exteriorul.

Sintaxă comandă
docker network <create|ls|inspect|connect|disconnect|rm|prune> [opțiuni]

Ce face docker network

Containerele conectate la aceeași rețea bridge definită de utilizator (creată cu docker network create) primesc rezoluție DNS automată: containerul api se poate conecta la baza de date folosind direct numele de gazdă db, fără să îi cunoască adresa IP internă și fără să fie nevoie să publici portul 5432 pe gazdă.

Docker creează automat trei rețele: bridge (rețeaua implicită pentru docker run, care din motive istorice nu oferă DNS după nume între containere), host (containerul împarte direct stiva de rețea a gazdei) și none (fără rețea).

Un container poate fi atașat simultan la mai multe rețele (de exemplu o rețea frontend comună cu Nginx și o rețea backend comună doar cu baza de date), chiar și după ce a fost pornit, folosind docker network connect.

Opțiuni și argumente

Opțiune / Parametru Descriere
create [opțiuni] nume Creează o rețea nouă (implicit cu driverul bridge).
-d, --driver Driverul rețelei: bridge (implicit), host, overlay (Swarm), macvlan, none.
--subnet / --gateway Configurează manual subrețeaua CIDR (de ex. 172.25.0.0/16) și gateway-ul.
--internal Blochează accesul containerelor din această rețea către internet.
connect / disconnect Atașează sau detașează la cald un container de la o rețea (--alias adaugă un nume DNS suplimentar).
ls / inspect / rm / prune Listează, inspectează (arată ce containere sunt conectate), șterge sau curăță rețelele nefolosite.

Exemple

Exemplul 1: Comunicare prin DNS între două containere

Creăm o rețea proprie; containerul Alpine găsește automat containerul db după nume.

docker network create app-net
docker run -d --name db --network app-net -e POSTGRES_PASSWORD=secret postgres:16
docker run --rm --network app-net alpine ping -c 2 db

Ieșire în terminal

e1b2c3d4f5a67890123456789abcdef0123456789abcdef0123456789abcdef0
c1d2e3f4a5b67890123456789abcdef0123456789abcdef0123456789abcdef0
PING db (172.19.0.2): 56 data bytes
64 bytes from 172.19.0.2: seq=0 ttl=64 time=0.118 ms
64 bytes from 172.19.0.2: seq=1 ttl=64 time=0.092 ms

Exemplul 2: Ce containere sunt într-o rețea?

Subcomanda inspect arată toate containerele atașate și IP-urile lor.

docker network inspect -f "{{range .Containers}}{{.Name}}: {{.IPv4Address}} {{end}}" app-net

Ieșire în terminal

db: 172.19.0.2/16

Greșeli frecvente

  • Pornirea a două containere fără --network și încercarea de a le conecta după nume: în rețeaua bridge implicită DNS-ul după nume nu este activ. Creează mereu o rețea proprie sau folosește Docker Compose.
  • Conectarea din interiorul unui container la localhost:5432 sperând să ajungi la un alt container: localhost în container este containerul însuși, nu gazda și nici alt container.

Comenzi înrudite

  • docker run: Creează și pornește un container nou dintr-o imagine.
  • docker inspect: Afișează în format JSON toate detaliile de nivel jos ale unui obiect Docker.
  • compose.yaml: Fișierul declarativ în care descrii serviciile, rețelele și volumele unei aplicații multi-container.
  • docker compose up: Construiește imaginile, creează rețeaua și volumele și pornește toate serviciile din compose.yaml.