Ce face docker run -v / --mount
Când pornești un container cu docker run, ai trei moduri de a monta date în el: un volum cu nume (gestionat de Docker, ideal pentru baze de date), un bind mount (un director sau fișier exact de pe gazdă, ideal pentru codul sursă în dezvoltare și fișiere de configurare) sau un tmpfs mount (stocat doar în memoria RAM, util pentru secrete sau fișiere temporare rapide).
Opțiunea scurtă -v (--volume) distinge între volum și bind mount după primul caracter al sursei: dacă începe cu / sau ./ este o cale de pe gazdă (bind mount); dacă este un simplu nume (de exemplu pgdata) este un volum Docker.
Opțiunea mai nouă --mount este mai explicită (perechi cheie=valoare separate prin virgulă) și are un comportament mai sigur la bind mount: dacă calea de pe gazdă nu există, --mount oprește pornirea cu o eroare clară, pe când -v creează în tăcere un director gol deținut de root.
Opțiuni și argumente
| Opțiune / Parametru | Descriere |
|---|---|
-v nume:/cale[:ro] |
Montează volumul gestionat nume la /cale în container; dacă /cale există în imagine, la prima folosire conținutul ei este copiat în volum. |
-v /gazdă:/cale[:ro] |
Bind mount: montează directorul sau fișierul de pe gazdă peste /cale din container (ascunzând ce era în imagine). |
-v /cale |
Volum anonim (fără nume): util ca să păstrezi un subdirector din imagine (de ex. /app/node_modules) când montezi codul de pe gazdă peste /app. |
:ro |
Sufix pentru -v (sau readonly pentru --mount) care face montarea doar în citire în interiorul containerului. |
--mount type=volume|bind|tmpfs |
Sintaxa explicită: source= (sau src=), target= (sau dst=), readonly, tmpfs-size=. |
:z / :Z |
Pe sisteme cu SELinux (Fedora, RHEL), :z sau :Z reetichetează directorul de pe gazdă ca să poată fi citit din container. |
Exemple
Exemplul 1: Dezvoltare locală cu bind mount și păstrarea node_modules
Montăm codul curent în /app, dar păstrăm /app/node_modules într-un volum anonim ca să nu fie suprascris de directorul de pe gazdă.
docker run -d --name dev -p 3000:3000 -v "$(pwd):/app" -v /app/node_modules node:20-alpine npm run dev
Ieșire în terminal
4a5b6c7d8e9f0123456789abcdef0123456789abcdef0123456789abcdef0123
Exemplul 2: Montarea unui fișier de configurare doar în citire cu –mount
Dacă ./nginx.conf nu există pe gazdă, comanda eșuează imediat în loc să creeze un director gol.
docker run -d --name web -p 8080:80 --mount type=bind,src="$(pwd)/nginx.conf",dst=/etc/nginx/conf.d/default.conf,readonly nginx:1.27
Ieșire în terminal
8f7e6d5c4b3a29182736455463728190abcdef1234567890abcdef1234567890
Greșeli frecvente
- Montarea unui fișier inexistent cu
-v ./config.yml:/app/config.yml: Docker creează un directorconfig.ymlpe gazdă, iar aplicația din container dă eroareaIs a directory. - Căi relative cu
-vîn versiuni mai vechi de Docker (sub 23): folosește"$(pwd)/director:/cale"pentru compatibilitate sigură.
Comenzi înrudite
docker volume: Creează, listează, inspectează și șterge volume gestionate de Docker pentru date persistente.docker run: Creează și pornește un container nou dintr-o imagine.docker cp: Copiază fișiere sau directoare între container și sistemul gazdă.compose.yaml: Fișierul declarativ în care descrii serviciile, rețelele și volumele unei aplicații multi-container.