docker volume

Zarządza wolumenami danych (tworzy, listuje, usuwa).

docker volume to zestaw poleceń do zarządzania wolumenami, czyli trwałym magazynem danych w Dockerze. Kontener z natury jest ulotny — kasujesz go i znika razem z całą zawartością. Wolumen rozwiązuje ten problem: trzyma dane (bazę, uploady, cache) poza warstwą kontenera, więc przeżywają jego restart, przebudowę czy usunięcie. Za pomocą podkomend tworzysz wolumeny, listujesz je, podglądasz szczegóły i sprzątasz te, których nikt już nie używa.

Składnia i najważniejsze opcje

Podstawowa forma to docker volume KOMENDA [opcje], gdzie KOMENDA to jedna z podkomend zarządzających.

  • create — tworzy nowy wolumen (np. docker volume create dane)
  • ls — listuje wszystkie wolumeny
  • inspect — pokazuje szczegóły: sterownik, ścieżkę montowania, etykiety
  • rm — usuwa wskazany wolumen
  • prune — masowo czyści nieużywane wolumeny
  • -d, --driver — wybór sterownika przy tworzeniu (domyślnie local)
  • -o, --opt — opcje sterownika, np. montowanie konkretnego katalogu hosta
  • -f, --filter — filtruje wynik przy ls i prune (np. dangling=true)

Przykłady użycia

  • docker volume create pgdata — tworzy nazwany wolumen pgdata, który podepniesz pod bazę PostgreSQL.
  • docker volume ls — wypisuje wszystkie wolumeny; dorzuć -q, żeby dostać same nazwy do skryptu.
  • docker run -d -v pgdata:/var/lib/postgresql/data postgres — podpina wolumen pod kontener, więc dane bazy zostają nawet po jego usunięciu.
  • docker volume inspect pgdata — zwraca JSON ze ścieżką na hoście (Mountpoint) i metadanymi — przydatne przy debugowaniu, gdzie fizycznie leżą dane.
  • docker volume prune — usuwa wszystkie nieużywane wolumeny anonimowe; pyta o potwierdzenie, więc nie skasuje nic przez przypadek.

Częste błędy i pułapki

Największa zasadzka to prune. Domyślnie docker volume prune usuwa tylko wolumeny anonimowe — te nazwane (jak pgdata) zostawia w spokoju. Dopiero docker volume prune --all (lub -a) kasuje również nieużywane wolumeny nazwane. To różnica między „posprzątałem śmieci” a „skasowałem produkcyjną bazę”, więc czytaj flagę dwa razy.

Druga pułapka: docker volume rm odmówi usunięcia wolumenu używanego przez kontener (nawet zatrzymany). Najpierw usuń kontener (docker rm), dopiero potem wolumen. Wymuszanie przez -f tu nie pomoże, bo flaga ignoruje tylko brak wolumenu, nie aktywne powiązanie. I pamiętaj: usunięcie wolumenu jest nieodwracalne — Docker nie ma kosza.

Powiązane komendy: docker run -v i docker run --mount (podpinanie wolumenów), docker system prune --volumes (sprzątanie całego systemu), docker inspect oraz docker compose z sekcją volumes.