Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

rodar o postgres com volume

Pode me ajudar a rodar o postgres com volume? Estou usando esse código e não está funcionando, eu até vejo os arquivos sendo criados no diretório mas em seguida eles somem.

docker run -d -p 5432:5432 -v "D:\dockervolume\postgres:/var/lib/postgresql/data" -e POSTGRES_PASSWORD=postgres -e PRIMARY_USER=postgres postgres

o erro quando rodo sem o -d está a seguir

λ  docker run -p 5432:5432 -v "D:\dockervolume\postgres:/var/lib/postgresql/data" -e POSTGRES_PASSWORD=postgres -e PRIMARY_USER=postgres postgres
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

The database cluster will be initialized with locale "en_US.utf8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".

Data page checksums are disabled.

fixing permissions on existing directory /var/lib/postgresql/data ... ok
creating subdirectories ... ok
selecting dynamic shared memory implementation ... posix
selecting default max_connections ... 20
selecting default shared_buffers ... 400kB
selecting default time zone ... Etc/UTC
creating configuration files ... ok
running bootstrap script ... 2020-06-22 23:18:01.032 UTC [81] FATAL:  data directory "/var/lib/postgresql/data" has wrong ownership
2020-06-22 23:18:01.032 UTC [81] HINT:  The server must be started by the user that owns the data directory.
child process exited with exit code 1
initdb: removing contents of data directory "/var/lib/postgresql/data"
2 respostas
solução!

Olá Ulisses, tudo bem? Na verdade o erro é exibido na linha The server must be started by the user that owns the data directory, o que acontece é por algum motivo o docker não está com permissão nesse diretório. Isso pode acontecer, porque quando você indica um volume do comando docker run -v ele cria um volume com as permissões do usuário root do docker, então você poderia tentar criar o volume usando um comando como:

docker volume create nome_do_volume

E depois tentar criar o container do Postgres novamente usando esse volume criado:

docker run -d -p 5432:5432 -v "nome_do_volume:/var/lib/postgresql/data" -e POSTGRES_PASSWORD=postgres -e PRIMARY_USER=postgres postgres

Só explicando melhor: A mesma coisa acontece quando você usa o -d porém como o terminal fica desanexado você não percebe. Mas a questão é de fato o volume. Acho que dessa forma que falei pode funcionar.

Tenta seguir esses passos e fala pra gente se funcionou!

Deu certo! Muito Obrigado!