关于postgresql:从Debian Docker容器连接到Windows Postgres

Connect to Windows Postgres from Debian Docker container

我正在Windows 10计算机上运行Postgres,我想从Docker容器连接到它。我遵循了来自许多来源的说明,并且应该可以进行操作,但实际上并不能。

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

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

postgresql.conf中:

1
listen_addresses = '*'

pg_hba.conf中:

1
host    ALL             ALL             172.17.0.0/16           trust

在容器的bashshell中,运行:

1
psql -h 127.0.0.1

我得到了错误:

psql: could not connect to server: Connection refused

Is the server running on host"127.0.0.1" and accepting TCP/IP connections on port 5432?

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


此功能不适用于DOCKER v18.03及更高版本
答案已经存在-从Docker容器内部,如何连接到计算机的本地主机?

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

对于DOCKER v18.03及更高版本

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

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


您已经发现,--network-host不适用于Windows的Docker或Mac的Docker。它仅适用于Linux主机。

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

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

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

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