PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Docker-Volume speichert keine Daten

Es gibt etwas, das mich verwirrt hat und für mich in der offiziellen Dokumentation nicht ganz klar war.

Meines Wissens können persistente Volumes in drei erstellt werden Wege.

  • Zur Aufrufzeit des Containers einschließlich vollständigem Pfad ( -v ~/database:/data ):macht einen externen Ordner vom Host im Docker-Container verfügbar. Beide können es ändern.
  • Zur Aufrufzeit des Containers Verwenden eines Volume-Namens ( -v datamysql:/data ):macht ein Volume, das dauerhaft im Container verfügbar ist. Es wird erstellt, wenn es nicht existiert. Sie können sie mit docker volume ls nach Namen auflisten . Intern wird es an einem Ort wie /var/lib/docker/volumes/ae4445f7c9317a22fe84726fb894c47754f38a7fd150c00fd877024889968750/_data gespeichert .
  • Zur Bauzeit des Containers ( VOLUME ["/database/data"] im Dockerfile). Jeder Aufruf von docker run erstellt ein neues Volume, das auch dann bestehen bleibt, wenn Sie den Container löschen. Dies kann verwirrend sein, da nachfolgende Aufrufe anders ergeben erstellte Volumes, die nicht wiederverwendet werden.

Sie können sowohl benannte (zweiter Fall) als auch unbenannte (dritter Fall) Volumes mit

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

Sie können den genauen Speicherort des Volumes eines Containers anzeigen, indem Sie docker inspect mycontainer verwenden

{
                "Type": "volume",
                "Name": "8d7a35354f666b2e8a26866a35bbae36bb9601701d4c6b505ab8ce6629f69415",
                "Source": "/media/USBdrive/docker/volumes/8d7a35354f666b2e8a26866a35bbae36bb9601701d4c6b505ab8ce6629f69415/_data",
                "Destination": "/var/lib/mysql",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            },

Es kann praktisch sein, unbenutzte Volumes zu entfernen (insbesondere für den dritten Fall).

$ 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

Weil Sie das VOLUME verwendet haben Direktive in Ihrem Dockerfile befinden Sie sich im dritten Fall. Untersuchen Sie Ihren Container, um nach der Datei zu suchen, und geben Sie das Volume über die Befehlszeile an, wenn wiederholte Sitzungen Daten beibehalten sollen.