Je tu něco, co mě zmátlo a nebylo pro mě v oficiální dokumentaci příliš jasné.
Pokud je mi známo, trvalé svazky lze vytvořit ve třích způsoby.
- V čas vyvolání kontejneru včetně úplné cesty (
-v ~/database:/data
):zpřístupní externí složku z hostitele uvnitř kontejneru dockeru. Oba jej mohou upravit. - V čas vyvolání kontejneru pomocí názvu svazku (
-v datamysql:/data
):zpřístupní objem, který je trvale dostupný uvnitř kontejneru. Je stvořen, pokud by neexistoval. Můžete je vypsat podle názvu pomocídocker volume ls
. Interně bude uložen na místě, jako je/var/lib/docker/volumes/ae4445f7c9317a22fe84726fb894c47754f38a7fd150c00fd877024889968750/_data
. - V času sestavení kontejneru (
VOLUME ["/database/data"]
v Dockerfile). Každé vyvolánídocker run
vytvoří nový svazek, který přetrvá, i když kontejner odstraníte. To může být matoucí, protože následná vyvolání budou mít za následek jiné vytvářené svazky, které nebudou znovu použity.
Pomocí
můžete uvést pojmenované (druhý případ) i nepojmenované (třetí případ).$ docker volume ls
DRIVER VOLUME NAME
local 064593b3e65977097d4d0c8402a6c633f1af69be2937bf118678ab8f97ee9a7e
local 4753ad0437d13e54c76d9c34a30a1843396a1866a0cf9237d500fdcca0d78c5f
local 8d7a35354f666b2e8a26866a35bbae36bb9601701d4c6b505ab8ce6629f69415
local db48eefe8f189b36107ca9c4eebb792690590ab0ba055e7e4e2c9adfd1765b7e
local datamysql
Přesné umístění objemu kontejneru můžete zobrazit pomocí docker inspect mycontainer
{
"Type": "volume",
"Name": "8d7a35354f666b2e8a26866a35bbae36bb9601701d4c6b505ab8ce6629f69415",
"Source": "/media/USBdrive/docker/volumes/8d7a35354f666b2e8a26866a35bbae36bb9601701d4c6b505ab8ce6629f69415/_data",
"Destination": "/var/lib/mysql",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
},
Může být užitečné odstranit nepoužívané svazky (speciálně pro třetí případ).
$ 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
Protože jste použili VOLUME
direktivu ve vašem Dockerfile, jste ve třetím případě. Zkontrolujte svůj kontejner a vyhledejte soubor, a pokud chcete, aby opakované relace uchovaly data, zadejte svazek z příkazového řádku.