PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Wolumin Dockera nie utrzymuje danych

Jest coś, co mnie zdezorientowało i nie było dla mnie jasne w oficjalnej dokumentacji.

Według mojej wiedzy trwałe woluminy można utworzyć w trzech sposoby.

  • W kontenerze czas wywołania w tym pełna ścieżka ( -v ~/database:/data ):udostępnia zewnętrzny folder z hosta w kontenerze dockera. Obaj mogą to modyfikować.
  • W kontenerze czas wywołania używając nazwy woluminu ( -v datamysql:/data ):sprawia, że ​​wewnątrz kontenera jest dostępna trwała objętość. Tworzy ją, jeśli nie istniała. Możesz je wymienić według nazwy za pomocą docker volume ls . Wewnętrznie będzie przechowywany w miejscu takim jak /var/lib/docker/volumes/ae4445f7c9317a22fe84726fb894c47754f38a7fd150c00fd877024889968750/_data .
  • W kontenerze czas kompilacji ( VOLUME ["/database/data"] w pliku Docker). Każde wywołanie docker run utworzy nowy wolumin, który będzie trwał nawet po usunięciu kontenera. Może to być mylące, ponieważ kolejne wywołania spowodują różne tworzone woluminy, które nie będą ponownie używane.

Możesz wyświetlić zarówno nazwane (drugi przypadek), jak i nienazwane (trzeci przypadek) woluminy za pomocą

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

Możesz zobaczyć dokładną lokalizację woluminu kontenera, używając docker inspect mycontainer

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

Przydatne może być usunięcie nieużywanych woluminów (szczególnie w trzecim przypadku).

$ 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

Ponieważ użyłeś VOLUME dyrektywy w pliku Dockerfile, jesteś w trzecim przypadku. Sprawdź swój kontener, aby znaleźć plik, i określ wolumin z wiersza poleceń, jeśli chcesz, aby powtarzające się sesje utrwalały dane.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PgAdmin4 włącz debugowanie

  2. Jak odwoływać się do nazwanych parametrów w funkcjach sql Postgresa?

  3. używając logiki warunkowej :sprawdź, czy rekord istnieje; jeśli tak, zaktualizuj go, jeśli nie, utwórz go

  4. Railsy:Jak utworzyć kolumnę czasu ze strefą czasową na postgresie

  5. Wbudowane w Postgresql polecenie COPY z zapytaniem sparametryzowanym