从Debian Docker容器连接到Windows Postgres

时间:2018-10-11 16:22:12

标签: postgresql docker docker-windows

我正在Windows 10计算机上运行Postgres,我想从Docker容器连接到它。我遵循了许多来源的指示,并且应该应该起作用,但事实并非如此。

用于创建Docker容器的命令行:

docker run --rm -d --network=host --name mycontainer myimage

postgresql.conf中:

listen_addresses = '*'  

pg_hba.conf中:

host    all             all             172.17.0.0/16           trust

在容器的bash外壳中,运行:

psql -h 127.0.0.1

我得到了错误:

  

psql:无法连接到服务器:连接被拒绝

     

服务器是否在主机“ 127.0.0.1”上运行并在端口5432上接受TCP / IP连接?

不用说,Postgres肯定在我的计算机上运行,​​并且我可以从本地应用程序中查询它。我想念什么?

3 个答案:

答案 0 :(得分:4)

此功能不适用于DOCKER v18.03及更高版本
 答案已经在那里-From inside of a Docker container, how do I connect to the localhost of the machine?

此问题与mysql设置有关,但它也适用于您的情况。

适用于DOCKER v18.03及更高版本

使用host.docker.internal来引用主机。

https://docs.docker.com/docker-for-windows/networking/#i-cannot-ping-my-containers

答案 1 :(得分:2)

使用主机的真实IP地址在docker容器中配置连接,或使用dns名称作为解决方法

答案 2 :(得分:2)

正如您所发现的,do()不适用于Windows的Docker或Mac的Docker。 It only works on Linux hosts

此方案的一个选项可能是将PostgreSql也托管在一个容器中。如果使用docker-compose文件部署它们,则应该能够将两个单独的Docker容器(一个用于数据库,另一个用于服务)联网在一起。默认情况下,使用容器名称作为其DNS名称,在同一撰写文件中将docker-compose will expose containers与其他人一起使用。

您还可以考虑将数据库包含在与服务相同的容器中,但是出于以下几个原因,我认为docker-compose解决方案更好:

  1. 它遵循每个容器的最佳实践,每个容器只有一个过程和一个责任。
  2. 这意味着您可以轻松地更改和重新部署服务,而无需重新创建数据库容器。