De acordo com o Ancoragem do Docker Compose , quando você escreve algo como:
volumes:
- /var/lib/postgresql/data
Ele cria um novo volume docker e o mapeia para
/var/lib/postgresql/data
dentro do contêiner. Portanto, cada vez que você executar docker-compose up
e docker-compose down
, ele cria um novo volume. Você pode confirmar o comportamento com docker volume ls
. Para evitá-lo, você tem duas opções:
(A) Mapear o diretório do host no contêiner
Você pode mapear o diretório do host para o contêiner usando
<HOST_PATH>:<CONTAINER_PATH>
. volumes:
- /path/to/your/host/directory:/var/lib/postgresql/data
Os dados do postgresql serão salvos em
/path/to/your/host/directory
do host do contêiner. (B) Usar contêiner externo
docker-compose tem uma opção de contêiner externo .Quando definido como true, nem sempre criará volume.Aqui está um exemplo.
version: '2'
services:
dbdata:
image: postgres:9.5.2
volumes:
- mypostgresdb:/var/lib/postgresql/data
volumes:
mypostgresdb:
external: true
Com
external: true
, o docker-compose não criará o mypostgredb
volume, então você tem que criá-lo por conta própria usando o seguinte comando:docker volume create --name=mypostgredb
Os dados do postgresql serão salvos no volume docker chamado
mypostgredb
. Leia a referência
para mais detalhes.