Има нещо, което ме обърка и за мен не беше много ясно в официалната документация.
Доколкото ми е известно, постоянните томове могат да бъдат създадени в три начини.
- По време на извикване на контейнера включително пълен път (
-v ~/database:/data
):прави външна папка от хоста достъпна вътре в докер контейнера. И двамата могат да го променят. - По време на извикване на контейнера използвайки име на том (
-v datamysql:/data
):прави обем, който е постоянен, достъпен вътре в контейнера. Създадено е, ако не е съществувало. Можете да ги изброите по име сdocker volume ls
. Вътрешно той ще се съхранява на място като/var/lib/docker/volumes/ae4445f7c9317a22fe84726fb894c47754f38a7fd150c00fd877024889968750/_data
. - По време на сглобяване на контейнера (
VOLUME ["/database/data"]
в Dockerfile). Всяко извикване наdocker run
ще създаде нов том, който ще продължи дори ако изтриете контейнера. Това може да е объркващо, защото последващите извиквания ще доведат до различни създават се томове, които няма да бъдат използвани повторно.
Можете да посочите както именувани (втори случай), така и неименувани (трети случай) томове с
$ docker volume ls
DRIVER VOLUME NAME
local 064593b3e65977097d4d0c8402a6c633f1af69be2937bf118678ab8f97ee9a7e
local 4753ad0437d13e54c76d9c34a30a1843396a1866a0cf9237d500fdcca0d78c5f
local 8d7a35354f666b2e8a26866a35bbae36bb9601701d4c6b505ab8ce6629f69415
local db48eefe8f189b36107ca9c4eebb792690590ab0ba055e7e4e2c9adfd1765b7e
local datamysql
Можете да видите точното местоположение на обема на контейнера, като използвате docker inspect mycontainer
{
"Type": "volume",
"Name": "8d7a35354f666b2e8a26866a35bbae36bb9601701d4c6b505ab8ce6629f69415",
"Source": "/media/USBdrive/docker/volumes/8d7a35354f666b2e8a26866a35bbae36bb9601701d4c6b505ab8ce6629f69415/_data",
"Destination": "/var/lib/mysql",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
},
Може да е удобно да премахнете неизползваните томове (особено за третия случай).
$ docker volume prune
WARNING! This will remove all volumes not used by at least one container.
Are you sure you want to continue? [y/N] y
Deleted Volumes:
4753ad0437d13e54c76d9c34a30a1843396a1866a0cf9237d500fdcca0d78c5f
Total reclaimed space: 205MB
Защото сте използвали VOLUME
във вашия Dockerfile, вие сте в третия случай. Проверете контейнера си, за да потърсите файла, и задайте обема от командния ред, ако искате повтарящите се сесии да запазят данните.