sql >> Databáze >  >> RDS >> PostgreSQL

Svazek dockeru neuchovává data

Je tu něco, co mě zmátlo a nebylo pro mě v oficiální dokumentaci příliš jasné.

Pokud je mi známo, trvalé svazky lze vytvořit ve třích způsoby.

  • V čas vyvolání kontejneru včetně úplné cesty ( -v ~/database:/data ):zpřístupní externí složku z hostitele uvnitř kontejneru dockeru. Oba jej mohou upravit.
  • V čas vyvolání kontejneru pomocí názvu svazku ( -v datamysql:/data ):zpřístupní objem, který je trvale dostupný uvnitř kontejneru. Je stvořen, pokud by neexistoval. Můžete je vypsat podle názvu pomocí docker volume ls . Interně bude uložen na místě, jako je /var/lib/docker/volumes/ae4445f7c9317a22fe84726fb894c47754f38a7fd150c00fd877024889968750/_data .
  • V času sestavení kontejneru ( VOLUME ["/database/data"] v Dockerfile). Každé vyvolání docker run vytvoří nový svazek, který přetrvá, i když kontejner odstraníte. To může být matoucí, protože následná vyvolání budou mít za následek jiné vytvářené svazky, které nebudou znovu použity.

Pomocí

můžete uvést pojmenované (druhý případ) i nepojmenované (třetí případ).
$ docker volume ls                                                             
DRIVER              VOLUME NAME                                                             
local               064593b3e65977097d4d0c8402a6c633f1af69be2937bf118678ab8f97ee9a7e               
local               4753ad0437d13e54c76d9c34a30a1843396a1866a0cf9237d500fdcca0d78c5f           
local               8d7a35354f666b2e8a26866a35bbae36bb9601701d4c6b505ab8ce6629f69415               
local               db48eefe8f189b36107ca9c4eebb792690590ab0ba055e7e4e2c9adfd1765b7e                    
local               datamysql

Přesné umístění objemu kontejneru můžete zobrazit pomocí docker inspect mycontainer

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

Může být užitečné odstranit nepoužívané svazky (speciálně pro třetí případ).

$ 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

Protože jste použili VOLUME direktivu ve vašem Dockerfile, jste ve třetím případě. Zkontrolujte svůj kontejner a vyhledejte soubor, a pokud chcete, aby opakované relace uchovaly data, zadejte svazek z příkazového řádku.



  1. node-mysql kam jde connection.end().

  2. Vyberte uživatele, kteří patří pouze do určitých oddělení

  3. Problémy s UTF8 MySQL na Rails - problémy s kódováním utf8_general_ci

  4. MySQL najde všechny rodiče rekurzivně