Como persistir dados em um banco de dados postgres encaixado usando volumes
Meu arquivo de composição do docker possui três contêineres, web, nginx e postgres. O Postgres fica assim:
postgres:
container_name: postgres
restart: always
image: postgres:latest
volumes:
- ./database:/var/lib/postgresql
ports:
- "5432:5432
Meu objetivo é montar um volume que corresponda a uma pasta local chamada./database
dentro do contêiner do postgres como/var/lib/postgres
. Quando inicio esses contêineres e insiro dados no postgres, verifico se/var/lib/postgres/data/base/
está cheio dos dados que estou adicionando (no contêiner do postgres), mas no meu sistema local,./database
só recebe umdata
pasta nele, ou seja,./database/data
é criado, mas está vazio. Por quê?
Notas:
Isso sugere que meu arquivo acima deve funcionar.Essa pessoa está usando serviços de docker, o que é interessanteATUALIZAÇÃO 1Por sugestão de Nick, fiz umadocker inspect
e encontrou:
"Mounts": [
{
"Source": "/Users/alex/Documents/MyApp/database",
"Destination": "/var/lib/postgresql",
"Mode": "rw",
"RW": true,
"Propagation": "rprivate"
},
{
"Name": "e5bf22471215db058127109053e72e0a423d97b05a2afb4824b411322efd2c35",
"Source": "/var/lib/docker/volumes/e5bf22471215db058127109053e72e0a423d97b05a2afb4824b411322efd2c35/_data",
"Destination": "/var/lib/postgresql/data",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],
O que faz parecer que os dados estão sendo roubados por outro volume que não me codifiquei. Não sei por que isso é. A imagem do postgres está criando esse volume para mim? Nesse caso, existe alguma maneira de usaresse volume em vez do volume que estou montando quando reinicio? Caso contrário, existe uma boa maneira de desativar esse outro volume e usar o meu,./database
?
Encontrei a solução, graças ao Nick! (e outro amigo) Responda abaixo.