Dockerizing PostgreSQL – psql连接被拒绝

我正在玩Docker,我想Dockerize一个Postgres容器。

我遵循官方的例子,但我无法连接到使用psql运行的映像。

我使用示例的内容创build了Dockerfile。 我从Dockerfile构build一个映像并为其分配一个名称。 然后我运行PostgreSQL服务器容器(在前台)。

~/test » docker run --rm -P --name pg_test eg_postgresql 2014-10-10 06:12:43 UTC LOG: database system was interrupted; last known up at 2014-10-10 06:12:29 UTC 2014-10-10 06:12:43 UTC LOG: database system was not properly shut down; automatic recovery in progress 2014-10-10 06:12:43 UTC LOG: redo starts at 0/1782F68 2014-10-10 06:12:43 UTC LOG: record with zero length at 0/1782FA8 2014-10-10 06:12:43 UTC LOG: redo done at 0/1782F68 2014-10-10 06:12:43 UTC LOG: last completed transaction was at log time 2014-10-10 06:12:29.2487+00 2014-10-10 06:12:43 UTC LOG: database system is ready to accept connections 2014-10-10 06:12:43 UTC LOG: autovacuum launcher started 

然后我打开另一个terminal找出端口:

 ~/test » docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES aaedb0479139 eg_postgresql:latest "/usr/lib/postgresql 3 days ago Up 41 seconds 0.0.0.0:49154->5432/tcp pg_test 

所以我可以使用psql连接到实例。 但我不能…

 ~/test » psql -h localhost -p 49154 -d docker -U docker --password Password for user docker: psql: could not connect to server: Connection refused Is the server running on host "localhost" (127.0.0.1) and accepting TCP/IP connections on port 49154? could not connect to server: Connection refused Is the server running on host "localhost" (::1) and accepting TCP/IP connections on port 49154? could not connect to server: Connection refused Is the server running on host "localhost" (fe80::1) and accepting TCP/IP connections on port 49154? 

任何帮助表示赞赏。

在我的Mac上运行这个为我工作:

  $ boot2docker ip The VM's Host only interface IP address is: 192.168.59.103 

然后连接:

  $ psql -h 192.168.59.103 -p 49159 -d docker -U docker --password 

这样做不太理想,但是https://docs.docker.com/installation/mac/上的说明表明,如果您想直接从您的Mac连接,则是正确的解决scheme。

如果将–publish选项添加到docker run命令

 docker run --rm -P --publish 127.0.0.1:5432:5432 --name pg_test eg_postgresql 

当你运行docker文件的时候,下面的代码会运行(注意现在的端口是5432)

 psql -h localhost -p 5432 -d docker -U docker --password