Banco de Dados

23 abr, 2026

Postgres e PGAdmin diretamente pelo Docker

Publicidade

Pra que instalar essas ferramentas localmente se podemos usar o Docker?

Uma das grandes sacadas de se usar o Docker é ter a facilidade de poder usar diferentes ferramentas e suas combinações (inclusive em diferentes versões!) de forma fácil e prática. O mesmo se aplica quando falamos do Postgres e sua ferramenta visual, o PgAdmin.

Neste artigo (e no vídeo abaixo) te explicarei como você pode subir uma instância do Postgres e do PgAdmin e usá-los em conjunto.
Spoiler: os comandos são simples, mas envolvem conceitos avançados de Docker! Acompanha aqui!

Estou assumindo que você já tenha o Docker instalado e rodando na sua máquina. Para subir uma instância do Postgres podemos usar o comando:

docker run --name my-postgres -p 5433:5432 -e POSTGRES_PASSWORD=postgres -d postgres

Este comando criada um container chamado my-postgres mapeado na porta 5433 da máquina na porta 5432 do container (porta padrão do postgres). Usamos a variável POSTGRES_PASSWORD para atribuir uma senha para o usuário postgres do banco de dados. Por fim, apenas usamos postgres para subir a última versão dele.

Uma vez que o container esteja funcionando, podemos acessá-lo através do localhost:5433! E simples assim já temos um banco de dados Postgres funcional pronto para uso.

Mas como criar uma imagem do PgAdmin para poder administrar esse banco de dados? O comando também é bem simples, apesar de ser mais extenso que o anterior:

docker run --name my-pgadmin -p 15432:80 -e PGADMIN_DEFAULT_EMAIL=diego@gmail.com -e PGADMIN_DEFAULT_PASSWORD=postgres -d dpage/pgadmin4

As únicas coisas diferentes aqui são as portas mapeadas e as variáveis necessárias. O PgAdmin exige o PGADMIN_DEFAULT_EMAIL e o PGADMIN_DEFAULT_EMAIL. Dando tudo certo, podemos acessar sua interface web através do localhost:15432!

Press enter or click to view image in full size

Tudo parece promissor até o momento em que você tenta acessar o banco de dados no container.

Press enter or click to view image in full size

Ué?! Por que não está funcionando?

Aqui é que está o pulo do gato 😺. Cada container funciona como um “computador isolado”. Na prática isso significa que os containers não são capazes de conversar um com o outro por padrão.

Mas se eles estão isolado, por que conseguimos usar os seus serviços separadamente?

Isso acontece porque ao criarmos os containers usamos o parâmetro -p para mapear a porta da máquina hospedeira (máquina que está rodando o Docker) com o container. Isso não acontece entre os containers em si.

Mas não há nada a temer porque podemos resolver isso criando uma rede (network). Assim como usamos redes para conectar nossos computadores para que eles possam “conversar” entre si, o mesmo se aplica para os containers.

docker network create my-network

Com a rede criada, podemos inserir nossos containers lá dentro ou iniciá-los já na rede. Como eles já estão em pé, seguiremos com a primeira opção:

docker network connect my-network my-postgres
docker network connect my-network my-pgadmin

Agora estamos quase lá. Para que seja possível usaro container do Postgres no PgAdmin precisamos usar o nome do container dentro da interface:

Press enter or click to view image in full size

Configuração do Postgres no PgAdmin

E pronto! Está tudo pronto para uso 😉

Segredinhos extras

Está tudo funcionando mas ainda temos dois problemas para resolver. O primeiro é que para toda vez que você quiser subir esse ecossitema, terá que “lembrar” dessas etapas. O segundo é que os dados persistidos no banco ficam salvos no container. Se o container morrer, os dados morrem junto. RIP

Como resolver estes problemas?

A melhor forma é usando o Docker Compose! Com essa ferramenta conseguimos criar um script para subir este ambiente, criar um volume para persistir os dados na máquina hospedeira e de quebrar criar uma rede Docker automaticamente. Olha só:

services:
postgres:
image: postgres
container_name: my-postgres
environment:
POSTGRES_PASSWORD: postgres
ports:
- "5433:5432"
volumes:
- postgres_data:/var/lib/postgresql/data

pgadmin:
image: dpage/pgadmin4
container_name: my-pgadmin
environment:
PGADMIN_DEFAULT_EMAIL: diego@gmail.com
PGADMIN_DEFAULT_PASSWORD: postgres
ports:
- "15432:80"
depends_on:
- postgres

volumes:
postgres_data:

A única novidade aqui é o volume. Você notará que criamos um volume chamado postgres_data mapeado na pasta /var/lib/postgresql/data do container. Por que esta pasta? Porque é nela que os dados são persistidos.

Crie este arquivo com o nome docker-compose.yml e no terminal execute:

docker compose up -d

Seu ambiente estará de pé! Para para basta:

docker compose stop