简体   繁体   English

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

[英]How to connect to a Postgres server in a Docker (1.12.0) container on a Mac?

The latest release of Docker doesn't use a virtual machine anymore, instead using a hypervisor to connect to the containers. 最新版本的Docker不再使用虚拟机,而是使用虚拟机管理程序连接到容器。 This means I can no longer login to postgres with psql : 这意味着我无法再使用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"?

I have also tried specifying localhost as the host, but that results in a strange output: 我也尝试将localhost指定为主机,但这会导致奇怪的输出:

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

Does anyone know what to do in this case? 有谁知道在这种情况下该怎么做? Thank you. 谢谢。

With follwing command, 有了下面的命令,

docker run -d -p 5433:5432 db postgres

You are exporting your docker's 5432 port to docker-engine's 5433 port. 您正在将docker的5432端口导出到docker-engine的5433端口。 Not your host machine's 5433. 不是你的主机5433。

Fetch your docker-machine's IP address with following command (assuming your docker vm name is default ) 使用以下命令获取docker-machine的IP地址(假设您的docker vm名称是default

docker-machine env default

This should give you result similar to following lines 这应该给你类似于以下行的结果

> 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"

Use your docker-machine's IP address to connect to Postgres running in container 使用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=#

You can connect over tcp by using an IP like psql -h 0.0.0.0 -p 5433 -U postgres (or 127.0.0.1, etc.). 您可以使用类似psql -h 0.0.0.0 -p 5433 -U postgres (或127.0.0.1等)的IP通过tcp连接。

Using the default or "localhost" will try using the local domain socket (although the version of Docker doesn't change this behavior, you will generally need to connect to a containerized db via tcp). 使用默认或“localhost”将尝试使用本地域套接字(尽管Docker的版本不会更改此行为,您通常需要通过tcp连接到容器化的数据库)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Docker for mac 1.12.0:如何从容器连接到主机 - Docker for mac 1.12.0: how to connect to host from container 如何从Mac的Redis Desktop Manager连接到Docker容器中的Redis服务器? - How can I connect to Redis server in a Docker Container from Redis Desktop Manager in Mac? 如何连接到OSx上的Docker容器中运行的postgres? - How do you connect to postgres running in a Docker container on OSx? 如何连接到在Mac上其他主机上运行的Docker容器? - How do I connect to a docker container running on a different host on a mac? 如何连接到在 Docker 容器中运行的服务器? - How do I connect to a server running in a Docker container? 如何从命令行连接到在非默认端口上的 Docker 容器中运行的 Postgres? - How can I connect to Postgres running in a Docker container on a non-default port from the command line? Mac:无法通过 Docker 连接到 SQL 服务器 - Mac: Cannot connect to SQL server through Docker Docker postgres 从 *inside* docker 容器到 Mac 上主机的 postgres localhost 实例的连接 - Docker postgres connection from *inside* docker container to host machine's postgres localhost instance on a Mac 在Mac上使用Postgres的Docker卷 - Docker Volumes on Mac with Postgres 如何从Mac到达docker容器`localhost`? - How to reach docker container `localhost` from Mac?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM