Според Документ на Docker Compose , когато напишете нещо като:
volumes:
- /var/lib/postgresql/data
Създава нов докер том и го свързва с /var/lib/postgresql/data
вътре в контейнера. Следователно всеки път, когато стартирате docker-compose up
и docker-compose down
, създава нов обем. Можете да потвърдите поведението с docker volume ls
.
За да го избегнете, имате две възможности:
(A) Карта на хост директория в контейнер
Можете да картографирате директория на хост в контейнер, като използвате <HOST_PATH>:<CONTAINER_PATH>
.
volumes:
- /path/to/your/host/directory:/var/lib/postgresql/data
Данните на postgresql ще бъдат запазени в /path/to/your/host/directory
на хоста на контейнера.
(B) Използвайте външен контейнер
docker-compose има опция за външен контейнер .Когато е зададено на true, няма винаги да създава обем. Ето един пример.
version: '2'
services:
dbdata:
image: postgres:9.5.2
volumes:
- mypostgresdb:/var/lib/postgresql/data
volumes:
mypostgresdb:
external: true
С external: true
, docker-compose няма да създаде mypostgredb
обем, така че трябва да го създадете сами, като използвате следната команда:
docker volume create --name=mypostgredb
Данните на postgresql ще бъдат записани в докер том с име mypostgredb
. Прочетете референция
за повече подробности.