sql >> Base de Datos >  >> RDS >> PostgreSQL

El volumen de Docker no conserva los datos

Hay algo que me confundió y para mí no estaba muy claro en la documentación oficial.

Que yo sepa, los volúmenes persistentes se pueden crear en tres formas.

  • En el momento de invocación del contenedor incluida la ruta completa ( -v ~/database:/data ):hace que una carpeta externa del host esté disponible dentro del contenedor docker. Ambos pueden modificarlo.
  • En el momento de invocación del contenedor usando un nombre de volumen ( -v datamysql:/data ):hace que un volumen persistente esté disponible dentro del contenedor. Se lo crea si no existiera. Puede enumerarlos por nombre con docker volume ls . Internamente, se almacenará en un lugar como /var/lib/docker/volumes/ae4445f7c9317a22fe84726fb894c47754f38a7fd150c00fd877024889968750/_data .
  • En el tiempo de compilación del contenedor ( VOLUME ["/database/data"] en Dockerfile). Cada invocación de docker run creará un nuevo volumen que persistirá incluso si elimina el contenedor. Esto puede resultar confuso porque las invocaciones posteriores darán como resultado diferentes se crean volúmenes que no se reutilizarán.

Puede listar volúmenes con nombre (segundo caso) y sin nombre (tercer caso) con

$ docker volume ls                                                             
DRIVER              VOLUME NAME                                                             
local               064593b3e65977097d4d0c8402a6c633f1af69be2937bf118678ab8f97ee9a7e               
local               4753ad0437d13e54c76d9c34a30a1843396a1866a0cf9237d500fdcca0d78c5f           
local               8d7a35354f666b2e8a26866a35bbae36bb9601701d4c6b505ab8ce6629f69415               
local               db48eefe8f189b36107ca9c4eebb792690590ab0ba055e7e4e2c9adfd1765b7e                    
local               datamysql

Puede ver la ubicación exacta del volumen de un contenedor 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": ""
            },

Puede ser útil eliminar volúmenes no utilizados (especialmente para el tercer caso).

$ 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 usaste el VOLUME directiva en su Dockerfile, se encuentra en el tercer caso. Inspeccione su contenedor para buscar el archivo y especifique el volumen desde la línea de comandos si desea que las sesiones repetidas conserven los datos.