sql >> Databasteknik >  >> RDS >> PostgreSQL

Docker volymen kvarstår inte data

Det är något som förvirrade mig och för mig var inte särskilt tydligt i den officiella dokumentationen.

Såvitt jag vet kan beständiga volymer skapas i tre sätt.

  • Vid behållarens anropstid inklusive fullständig sökväg ( -v ~/database:/data ):gör en extern mapp från värden tillgänglig inuti dockningsbehållaren. Båda kan ändra det.
  • Vid behållarens anropstid med ett volymnamn ( -v datamysql:/data ):gör en volym som är beständig tillgänglig inuti behållaren. Det skapas det om det inte fanns. Du kan lista dem efter namn med docker volume ls . Internt kommer den att lagras på en plats som /var/lib/docker/volumes/ae4445f7c9317a22fe84726fb894c47754f38a7fd150c00fd877024889968750/_data .
  • Vid container byggtid ( VOLUME ["/database/data"] i Dockerfile). Varje anrop av docker run kommer att skapa en ny volym som kommer att finnas kvar även om du tar bort behållaren. Detta kan vara förvirrande eftersom efterföljande anrop kommer att resultera i annorlunda volymer skapas som inte kommer att återanvändas.

Du kan lista både namngivna (andra fallet) och icke namngivna (tredje fallet) volymer med

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

Du kan se den exakta platsen för en containers volym genom att använda 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 vara praktiskt att ta bort oanvända volymer (speciellt för det tredje fallet).

$ 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

Eftersom du använde VOLUME direktiv i din Dockerfile är du i det tredje fallet. Inspektera din behållare för att leta efter filen och ange volymen från kommandoraden om du vill att upprepade sessioner ska bevara data.



  1. PHP PDO MySQL rullningsbar markör fungerar inte

  2. php radera mysql-raden från länken

  3. Tabell-värderade funktioner i ORACLE 11g ? (parameteriserade vyer)

  4. Kan inte få rätt tecken att visa från databasen