2016-08-07 55 views
3

Docker的最新版本不再使用虚拟机,而是使用虚拟机管理程序连接到容器。这意味着我再也不能登录到与psql Postgres的:如何连接到Mac上的Docker(1.12.0)容器中的Postgres服务器?

➜ 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: % 

有谁知道该怎么做在这种情况下?谢谢。

+1

仅供参考,它确实使用VM,而不是VirtualBox,它在Mac上使用xhyve虚拟机,但使用Unix套接字进行网络连接。如果您需要“本地”模型(例如,更接近模仿生产系统),则最好使用传统VM环境。 – ldg

+0

我假设在你的run声明中它应该是'docker run -d -p 5433:5432 --name = db postgres' – ldg

回答

0

您可以通过使用IP如psql -h 0.0.0.0 -p 5433 -U postgres(或127.0.0.1等)通过TCP连接。

使用默认或“本地主机”将尝试使用本地域套接字(尽管Docker的版本不会改变这种行为,您通常需要通过tcp连接到一个容器化的数据库)。

+0

它不会因为任何原因而工作。 – picardo

1

随着follwing命令,

docker run -d -p 5433:5432 db postgres 

要导出您的码头工人的5432端口泊坞窗,发动机的5433端口。不是你的主机的5433.

获取与下面的命令你的码头工人,机器的IP地址(假设你的搬运工虚拟机的名称为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" 

使用您的码头机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=# 
+0

它对我来说非常合适。谢谢!我使用了错误的IP地址。 –

相关问题