sql >> Database >  >> RDS >> PostgreSQL

Docker-volume bevat geen gegevens

Er is iets dat me in de war bracht en voor mij was het niet erg duidelijk in de officiële documentatie.

Voor zover ik weet, kunnen persistente volumes worden gemaakt in drie manieren.

  • Op container oproeptijd inclusief volledig pad ( -v ~/database:/data ):maakt een externe map van de host beschikbaar in de docker-container. Beiden kunnen het wijzigen.
  • Op container oproeptijd met een volumenaam ( -v datamysql:/data ):maakt een volume dat persistent beschikbaar is in de container. Het is gemaakt als het niet bestond. U kunt ze op naam weergeven met docker volume ls . Intern wordt het opgeslagen op een plaats zoals /var/lib/docker/volumes/ae4445f7c9317a22fe84726fb894c47754f38a7fd150c00fd877024889968750/_data .
  • Op container bouwtijd ( VOLUME ["/database/data"] in Dockerfile). Elke aanroep van docker run maakt een nieuw volume aan dat blijft bestaan, zelfs als u de container verwijdert. Dit kan verwarrend zijn omdat volgende aanroepen resulteren in verschillende volumes worden gemaakt die niet opnieuw zullen worden gebruikt.

U kunt zowel benoemde (tweede letter) als naamloze (derde letter) volumes weergeven met

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

U kunt de exacte locatie van het volume van een container zien met behulp van docker inspect mycontainer

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

Het kan handig zijn om ongebruikte volumes te verwijderen (speciaal voor het derde geval).

$ 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

Omdat je de VOLUME . hebt gebruikt richtlijn in uw Dockerfile, bevindt u zich in het derde geval. Inspecteer uw container om het bestand te zoeken en specificeer het volume vanaf de opdrachtregel als u wilt dat herhaalde sessies gegevens behouden.



  1. Hoe een tabel van MySQL naar Hive te importeren met Java?

  2. SQL Server-systeemdatabases - Systeemdatabases herstellen

  3. Collation in één keer wijzigen in utf8_bin

  4. PDO::query() verwacht dat parameter 1 string is, object gegeven Waarschuwing