Volumes: kde vlastne žijú dáta kontajnera
Ako sa pomenovaný volume líši od bind mountu, kde všetko fyzicky leží na disku a ako nestratiť databázu pri opätovnom vytvorení kontajnera.
Aktualizované 23. augusta 2026
Kontajner je jednorazový. Všetko, čo doň zapíšeš, zmizne spolu s ním. Dáta musia žiť mimo neho a existujú presne dva spôsoby: pomenovaný zväzok a pripojenie adresára z hostiteľa.
Dva spôsoby a kedy ktorý použiť
services:
db:
image: postgres:17
volumes:
- db-data:/var/lib/postgresql/data # named volume
app:
image: nginx:1.27
volumes:
- ./site:/usr/share/nginx/html:ro # directory bind mount
- ./nginx.conf:/etc/nginx/nginx.conf:ro
volumes:
db-data:
Pomenovaný zväzok vytvára a ukladá sám Docker, v /var/lib/docker/volumes/<name>/_data. Práva vnútri nastavuje automaticky obraz. Takto sa uchovávajú databázy a interný stav služieb.
Pripojenie adresára je bežná cesta na disku stroja. Takto poskytuješ konfiguračné súbory, statické súbory webu a certifikáty: pohodlne sa upravujú v editore a ukladajú do repozitára.
Príznak :ro robí pripojenie iba na čítanie. Použi ho všade, kde kontajner nepotrebuje zápis — je to lacná ochrana.
Kde je všetko fyzicky uložené
docker volume ls
docker volume inspect db-data
docker inspect -f '{{json .Mounts}}' <container> | python3 -m json.tool
sudo du -sh /var/lib/docker/volumes/* | sort -h | tail
Posledný príkaz je prvá vec, ktorú spustíš, keď dôjde miesto na disku. Viac podrobností: miesto na disku.
docker compose down -vadocker volume prunemažú zväzky natrvalo. Zväzok s databázou vyzerá ako „nepoužívaný“, kým je kontajner zastavený, a spadne pod čistenie. Pred čistením sa pozri na zoznam:docker volume ls -f dangling=true.
Kopírovanie a migrácia
Kopírovanie pomenovaného zväzku pomocou jednorazového kontajnera:
docker run --rm -v db-data:/from -v $(pwd):/to alpine \
tar czf /to/db-data.tar.gz -C /from .
Obnovenie:
docker volume create db-data
docker run --rm -v db-data:/to -v $(pwd):/from alpine \
tar xzf /from/db-data.tar.gz -C /to
Pre databázy je tento spôsob vhodný len vtedy, keď je kontajner zastavený: kopírovanie bežiacej databázy na úrovni súborov môže byť nekonzistentné. Lepšie je spraviť dump pomocou nástrojov samotnej databázy — pg_dump, mysqldump. Pozri čo presne kopírovať.
Práva
Najčastejšia chyba pri pripojeniach adresárov je nesúlad vlastníka. Vnútri kontajnera beží proces pod vlastným UID a súbor, ktorý na hostiteľovi vytvoril root, je preň neprístupný.
docker compose exec app id
sudo chown -R 1000:1000 ./data
Mnohé obrazy prijímajú premenné PUID/PGID — to je pohodlnejšie než meniť vlastníka adresára.
Časté chyby
- Dáta sa zapisovali dovnútra kontajnera. Pri aktualizácii si kontajner znovu vytvoril — dáta zmizli. Skontroluj:
docker diff <container>ukáže, čo sa v jeho súborovom systéme zmenilo; veľké zápisy tam sú varovným signálom. - Pripojil si adresár cez neprázdnu cestu v obraze. Obsah obrazu sa skryje a služba nenájde svoje súbory.
- Relatívna cesta v pripojení adresára. Rozbaľuje sa z adresára obsahujúceho
compose.yaml, nie z aktuálneho. Spustenie odinakiaľ vytvorí nový prázdny adresár. - Zabudol si na zväzky pri preinštalovaní OS. Preinštalovanie úplne vymaže disk. Kópia musí byť uložená nie na tomto stroji.