从外部连接到Docker容器中的Postgresql

我有一个泊坞窗容器中的服务器上的Postgresql。 我怎样才能从外面,即从我的本地计算机连接到它? 我应该采用什么样的设置来允许?

你可以这样运行Postgres(映射一个端口):

docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d -p 5432:5432 postgres 

所以现在你已经把你的容器的端口5432映射到你的服务器的端口5432。 -p <host_port>:<container_port> 。现在你的postgres可以从你的public-server-ip:5432

testing:运行postgres数据库(上面的命令)

 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 

进入你的容器并创build一个数据库:

 docker exec -it 05b3a3471f6f bash root@05b3a3471f6f:/# psql -U postgres postgres-# CREATE DATABASE mytest; postgres-# \q 

转到你的本地主机(你有一些工具或psql客户端)。

 psql -h public-ip-server -p 5432 -U postgres 

(密码mysecretpassword)

 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 

所以你从localhost访问数据库(在服务器上的docker中运行)。

我已经在主机上运行postgres,并不想允许networking连接,所以我没有在容器中运行临时postgres实例,只用两行创build了数据库:

 # Run PostgreSQL docker run --name postgres-container -e POSTGRES_PASSWORD=password -it -p 5433:5432 postgres # Create database docker exec -it postgres-container createdb -U postgres my-db