从Debian Docker容器连接到Windows Postgres

Sha*_*ica 5 postgresql docker docker-for-windows

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

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

docker run --rm -d --network=host --name mycontainer myimage
Run Code Online (Sandbox Code Playgroud)

postgresql.conf:

listen_addresses = '*'  
Run Code Online (Sandbox Code Playgroud)

pg_hba.conf:

host    all             all             172.17.0.0/16           trust
Run Code Online (Sandbox Code Playgroud)

在我的容器的bash shell中,我运行:

psql -h 127.0.0.1
Run Code Online (Sandbox Code Playgroud)

我收到错误:

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

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

毋庸置疑,Postgres肯定在我的计算机上运行,​​我可以从本地应用程序查询它.我错过了什么?

小智 2

正如您所发现的,它--network-host不适用于 Windows 版 Docker 或 Mac 版 Docker。它仅适用于 Linux 主机

对于这种情况,一种选择可能是也在容器中托管 PostgreSql。如果使用docker-compose文件部署它们,则应该能够拥有两个联网的独立 Docker 容器(一个用于数据库,一个用于服务)。默认情况下,docker-compose将使用容器名称作为其 DNS 名称,将容器公开给同一 compose 文件中的其他容器。

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

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