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

时间:2016-08-07 20:20:58

标签: macos postgresql docker

最新版本的Docker不再使用虚拟机,而是使用虚拟机管理程序连接到容器。这意味着我无法再使用psql登录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: %

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

2 个答案:

答案 0 :(得分:1)

使用follwing命令,

docker run -d -p 5433:5432 db postgres

您正在将docker的5432端口导出到docker-engine的5433端口。不是你的主机#5433。

使用以下命令获取您的docker-machine的IP地址(假设您的docker vm名称为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-machine的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=#

答案 1 :(得分:0)

您可以使用类似reduce_time_left(time.time() - self.last + self.interval)(或127.0.0.1等)的IP通过tcp连接。

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