在我的情况下,如何连接到Docker中的数据库?

我正试图通过docker容器连接到我的postgres。 我读了很多post,但似乎无法解决它。

我运行了下面的命令。

docker run --name some-postgres -e POSTGRES_PASSWORD=mypw -d -p 5432:5432 postgres 

之后,我做docker inspect $(containerID)

 "NetworkSettings": { "Bridge": "", "SandboxID": "773de825919cb75482af47b85b1804f96a32bc6e9951cc0ea80752f880789717", "HairpinMode": false, "LinkLocalIPv6Address": "", "LinkLocalIPv6PrefixLen": 0, "Ports": { "5432/tcp": [ { "HostIp": "0.0.0.0", "HostPort": "5432" } ] }, "SandboxKey": "/var/run/docker/netns/773de825919c", "SecondaryIPAddresses": null, "SecondaryIPv6Addresses": null, "EndpointID": "29c872cb1487519a8f605f7ba371e5ce84c2b163140babbb981ace8a12a273cd", "Gateway": "172.17.0.1", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "IPAddress": "172.17.0.2", "IPPrefixLen": 16, "IPv6Gateway": "", "MacAddress": "02:42:ac:11:00:02", "Networks": { "bridge": { "IPAMConfig": null, "Links": null, "Aliases": null, "NetworkID": "9d69c3e1dfa70572306fbe6dd14ed91d7ee96796deb27057b1c2992f573875f9", "EndpointID": "29c872cb1487519a8f605f7ba371e5ce84c2b163140babbb981ace8a12a273cd", "Gateway": "172.17.0.1", "IPAddress": "172.17.0.2", "IPPrefixLen": 16, "IPv6Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "MacAddress": "02:42:ac:11:00:02" } } } 

我的理解是我可以使用"IPAddress": "172.17.0.2"连接到数据库

所以我做

 psql -h 172.17.0.2 -p 5432 -U postgres 

但是,我得到操作超时错误,无法login到postgres。

错误

 psql: could not connect to server: Operation timed out Is the server running on host "172.17.0.2" and accepting TCP/IP connections on port 5432? 

任何人都可以帮助我吗? 非常感谢!

你没有提到你如何运行docker。 如果你在像OS X的Docker这样的工作站上使用它,你必须使用“localhost”来连接:

 psql -h localhost -p 5432 -U postgres 

如果您在Docker虚拟机或远程主机上运行容器,则需要本地networking中的外部接口IP。

 psql -h 192.168.99.100 -p 5432 -U postgres 

此外,你必须validation,如果PostgreSQL被configuration为允许远程连接,为了检查“ pg_hba.conf ”并添加

 host all all 0.0.0.0/0 md5 

并将listen_addresses更改为listen_addresses='*' :/etc/ listen_addresses listen_addresses='*' /postgresql.conf

请注意:此设置仅用于testing,并在您的数据库configuration中打开一个洞。