最新版本的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: %
有谁知道在这种情况下该怎么做?谢谢。
答案 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连接到容器化的数据库)。