Você pode executar o Postgres desta maneira (mapear uma porta):
docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d -p 5432:5432 postgres
Então agora você mapeou a porta 5432 do seu contêiner para a porta 5432 do seu servidor.
-p <host_port>:<container_port>
.Então agora seu postgres está acessível a partir de seu public-server-ip:5432
Para testar:Execute o banco de dados postgres (comando acima)
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
05b3a3471f6f postgres "/docker-entrypoint.s" 1 seconds ago Up 1 seconds 0.0.0.0:5432->5432/tcp some-postgres
Entre no seu container e crie um banco de dados:
docker exec -it 05b3a3471f6f bash
[email protected]:/# psql -U postgres
postgres-# CREATE DATABASE mytest;
postgres-# \q
Vá para seu localhost (onde você tem alguma ferramenta ou o cliente psql).
psql -h public-ip-server -p 5432 -U postgres
(senha minhasenha secreta)
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+------------+------------+-----------------------
mytest | postgres | UTF8 | en_US.utf8 | en_US.utf8 |
postgres | postgres | UTF8 | en_US.utf8 | en_US.utf8 |
template0 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres
Então você está acessando o banco de dados (que está sendo executado no docker em um servidor) do seu localhost.
Neste post é explicado em detalhes.