1001Ferramentas
🐘Dev

docker-compose PostgreSQL

Gere um docker-compose pronto para PostgreSQL, com usuário, senha, banco e volume persistente configurados. Suba seu banco local com um docker compose up.

YAML

Postgres local em um docker compose up

Você precisa de um banco para desenvolver e não quer instalar o Postgres na máquina, com serviço rodando no boot e cluster para limpar depois. Escolha a tag da imagem (16-alpine, 17, o que o projeto usar) e a senha, e o YAML sai pronto: um serviço, a porta 5432 publicada e um volume nomeado pgdata montado em /var/lib/postgresql/data, que é onde o Postgres guarda os dados.

O arquivo gerado define só POSTGRES_PASSWORD, e não é descuido: na imagem oficial, POSTGRES_USER assume postgres quando você não informa, e POSTGRES_DB assume o nome do usuário. Ou seja, você termina com usuário postgres e banco postgres, o que basta para desenvolver. Se quiser outros nomes, acrescente as duas variáveis. Também não há a chave version no topo, obsoleta na especificação atual do Compose.

A pegadinha: essas variáveis só valem na primeira subida, quando o diretório de dados está vazio e o initdb roda. Trocar a senha depois no YAML não muda nada; para valer, é docker compose down -v, que apaga o volume junto com os dados. E o mapeamento 5432:5432 publica em todas as interfaces. Em servidor exposto, use 127.0.0.1:5432:5432, porque a regra que o Docker cria passa por cima do ufw.

Perguntas frequentes

Já tenho Postgres instalado, vai dar conflito de porta?
Vai, nos dois na 5432. Publique em outra porta do host, como 5433:5432, e conecte pela 5433.
Como outro container acessa esse banco?
Pelo nome do serviço: host postgres, porta 5432. O Compose cria uma rede padrão e resolve o nome, então nesse cenário você nem precisa publicar a porta no host.
Perco os dados quando derrubo os containers?
Com docker compose down, não: o volume pgdata continua lá e o próximo up reaproveita. Com docker compose down -v, o volume é removido e o banco volta zerado.

Ferramentas Relacionadas