Há algo que me confundiu e para mim não ficou muito claro na documentação oficial.
Que eu saiba, volumes persistentes podem ser criados em três caminhos.
- No contêiner tempo de invocação incluindo o caminho completo (
-v ~/database:/data
):disponibiliza uma pasta externa do host dentro do contêiner docker. Ambos podem modificá-lo. - No contêiner tempo de invocação usando um nome de volume (
-v datamysql:/data
):disponibiliza um volume persistente dentro do contêiner. É criado se não existisse. Você pode listá-los por nome comdocker volume ls
. Internamente, ele será armazenado em um local como/var/lib/docker/volumes/ae4445f7c9317a22fe84726fb894c47754f38a7fd150c00fd877024889968750/_data
. - No contêiner tempo de compilação (
VOLUME ["/database/data"]
em Dockerfile). Cada invocação dedocker run
criará um novo volume que persistirá mesmo se você excluir o contêiner. Isso pode ser confuso porque invocações subsequentes resultarão em diferentes volumes sendo criados que não serão reutilizados.
Você pode listar volumes nomeados (segundo caso) e não nomeados (terceiro caso) com
$ docker volume ls
DRIVER VOLUME NAME
local 064593b3e65977097d4d0c8402a6c633f1af69be2937bf118678ab8f97ee9a7e
local 4753ad0437d13e54c76d9c34a30a1843396a1866a0cf9237d500fdcca0d78c5f
local 8d7a35354f666b2e8a26866a35bbae36bb9601701d4c6b505ab8ce6629f69415
local db48eefe8f189b36107ca9c4eebb792690590ab0ba055e7e4e2c9adfd1765b7e
local datamysql
Você pode ver a localização exata do volume de um contêiner usando
docker inspect mycontainer
{
"Type": "volume",
"Name": "8d7a35354f666b2e8a26866a35bbae36bb9601701d4c6b505ab8ce6629f69415",
"Source": "/media/USBdrive/docker/volumes/8d7a35354f666b2e8a26866a35bbae36bb9601701d4c6b505ab8ce6629f69415/_data",
"Destination": "/var/lib/mysql",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
},
Pode ser útil remover volumes não utilizados (para o terceiro caso, especialmente).
$ 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
Porque você usou o
VOLUME
diretiva em seu Dockerfile, você está no terceiro caso. Inspecione seu contêiner para procurar o arquivo e especifique o volume na linha de comando se desejar que sessões repetidas persistam dados.