PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Обемът на Docker не запазва данни

Има нещо, което ме обърка и за мен не беше много ясно в официалната документация.

Доколкото ми е известно, постоянните томове могат да бъдат създадени в три начини.

  • По време на извикване на контейнера включително пълен път ( -v ~/database:/data ):прави външна папка от хоста достъпна вътре в докер контейнера. И двамата могат да го променят.
  • По време на извикване на контейнера използвайки име на том ( -v datamysql:/data ):прави обем, който е постоянен, достъпен вътре в контейнера. Създадено е, ако не е съществувало. Можете да ги изброите по име с docker volume ls . Вътрешно той ще се съхранява на място като /var/lib/docker/volumes/ae4445f7c9317a22fe84726fb894c47754f38a7fd150c00fd877024889968750/_data .
  • По време на сглобяване на контейнера ( VOLUME ["/database/data"] в Dockerfile). Всяко извикване на docker run ще създаде нов том, който ще продължи дори ако изтриете контейнера. Това може да е объркващо, защото последващите извиквания ще доведат до различни създават се томове, които няма да бъдат използвани повторно.

Можете да посочите както именувани (втори случай), така и неименувани (трети случай) томове с

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

Можете да видите точното местоположение на обема на контейнера, като използвате docker inspect mycontainer

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

Може да е удобно да премахнете неизползваните томове (особено за третия случай).

$ 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

Защото сте използвали VOLUME във вашия Dockerfile, вие сте в третия случай. Проверете контейнера си, за да потърсите файла, и задайте обема от командния ред, ако искате повтарящите се сесии да запазят данните.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. pg_dump с user dont superadmin и големи обекти

  2. Как да избегнем PostgreSQL Cloud Vendor Lock-in

  3. Как точно работи кръгла функция в postgresql?

  4. как postgres да игнорира вмъквания с дублиран ключ, но да продължи

  5. Кога се избира за заключване и отключване на актуализиране?