如何连接到Mac上的Docker(1.12.0)容器中的Postgres服务器?

Docker的最新版本不再使用虚拟机,而是使用虚拟机pipe理程序连接到容器。 这意味着我不能再使用psqlloginpostgres:

 ➜ postgres git:(master) ✗ docker run -d -p 5433:5432 db postgres <sha> ➜ postgres git:(master) ✗ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 111f3bed4c52 db "/docker-entrypoint.s" 17 minutes ago Up 17 minutes 0.0.0.0:5433->5432/tcp zen_hugle ➜ postgres git:(master) ✗ psql -p 5433 -U postgres psql: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/tmp/.s.PGSQL.5433"? 

我也尝试指定localhost作为主机,但这会导致一个奇怪的输出:

 ➜ postgres git:(master) ✗ psql -h localhost -p 5433 -U postgres psql: % 

有没有人知道在这种情况下做什么? 谢谢。

你可以通过使用像psql -h 0.0.0.0 -p 5433 -U postgres (或127.0.0.1等)的IP来通过tcp进行连接。

使用默认或“本地主机”将尝试使用本地域套接字(虽然版本的Docker不会改变这种行为,你通常需要通过tcp连接到一个集装箱数据库)。

使用下面的命令,

 docker run -d -p 5433:5432 db postgres 

您正在将docker的5432端口导出到docker引擎的5433端口。 不是你的主机5433。

使用以下命令获取您的docker机器的IP地址(假设您的dockerVM名称是default

 docker-machine env default 

这应该给你类似于以下的结果

 > export DOCKER_TLS_VERIFY="1" > export DOCKER_HOST="tcp://192.168.99.100:2376" > export DOCKER_CERT_PATH="/Users/<your-user>/.docker/machine/machines/default" > export DOCKER_MACHINE_NAME="default" 

使用你的docker机的IP地址连接到在容器中运行的Postgres

 >psql -h 192.168.99.100 -p 5433 -U postgres psql (9.5.0, server 9.5.5) Type "help" for help. postgres=#