Der er noget, der forvirrede mig og for mig ikke var særlig tydeligt i den officielle dokumentation.
Mig bekendt kan vedvarende mængder oprettes i tre måder.
- På container-påkaldelsestidspunktet inklusive fuld sti (
-v ~/database:/data
):gør en ekstern mappe fra værten tilgængelig inde i docker-beholderen. Begge kan ændre det. - På container-påkaldelsestidspunktet ved hjælp af et volumennavn (
-v datamysql:/data
):gør et volumen, der er vedvarende tilgængeligt inde i beholderen. Det er skabt det, hvis det ikke eksisterede. Du kan liste dem efter navn meddocker volume ls
. Internt vil det blive gemt på et sted såsom/var/lib/docker/volumes/ae4445f7c9317a22fe84726fb894c47754f38a7fd150c00fd877024889968750/_data
. - Ved container byggetid (
VOLUME ["/database/data"]
i Dockerfile). Hver påkaldelse afdocker run
vil oprette en ny volumen, der vil bestå, selvom du sletter beholderen. Dette kan være forvirrende, fordi efterfølgende påkald vil resultere i anderledes mængder, der oprettes, som ikke vil blive genbrugt.
Du kan angive både navngivne (andet tilfælde) og unavngivne (tredje tilfælde) bind med
$ docker volume ls
DRIVER VOLUME NAME
local 064593b3e65977097d4d0c8402a6c633f1af69be2937bf118678ab8f97ee9a7e
local 4753ad0437d13e54c76d9c34a30a1843396a1866a0cf9237d500fdcca0d78c5f
local 8d7a35354f666b2e8a26866a35bbae36bb9601701d4c6b505ab8ce6629f69415
local db48eefe8f189b36107ca9c4eebb792690590ab0ba055e7e4e2c9adfd1765b7e
local datamysql
Du kan se den nøjagtige placering af en containers volumen ved at bruge docker inspect mycontainer
{
"Type": "volume",
"Name": "8d7a35354f666b2e8a26866a35bbae36bb9601701d4c6b505ab8ce6629f69415",
"Source": "/media/USBdrive/docker/volumes/8d7a35354f666b2e8a26866a35bbae36bb9601701d4c6b505ab8ce6629f69415/_data",
"Destination": "/var/lib/mysql",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
},
Det kan være praktisk at fjerne ubrugte mængder (specielt i det tredje tilfælde).
$ 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
Fordi du brugte VOLUME
direktiv i din Dockerfile, er du i det tredje tilfælde. Undersøg din container for at lede efter filen, og angiv volumen fra kommandolinjen, hvis du ønsker, at gentagne sessioner skal bevare data.