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!

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

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.
Vamos começar criando uma rede:
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-postgresdocker 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:

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: postgrescontainer_name: my-postgresenvironment:POSTGRES_PASSWORD: postgresports:- "5433:5432"volumes:- postgres_data:/var/lib/postgresql/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 |




