【问题标题】:Docker Compose Postgres Container connection refused from hosting machineDocker Compose Postgres Container 连接被主机拒绝
【发布时间】:2019-11-12 12:07:34
【问题描述】:

我有以下定义的 docker-compose 文件和 postgres 图像,我想从我的 PC 的 hosting 机器运行并连接到它,但我一直收到 Connection Refused localhost:5432 .我意识到容器必须在主机网络驱动程序上运行,但网络模式并不能解决这个问题。我做错了什么?

我在Windows 10 with Docker for Desktop 上使用docker-compose -f [file] up 运行它

version: '3.7'
services:
  database:
      image: postgres:10.6
      restart: always
      ports:
        - "5432:5432"
      environment:
        - POSTGRES_USER=postgres
        - POSTGRES_PASSWORD=p0stgr@s
        - POSTGRES_DB=eagle_eye_local
      network_mode: host

当我使用以下命令运行同一个容器时,它可以工作:

docker container run --name postgres10.6 -e POSTGRES_PASSWORD=p0stgr@s -e POSTGRES_USER=postgres -e  POSTGRES_DB=eagle_eye_local -p 5432:5432 postgres:10.6

【问题讨论】:

  • 你说的是 docker for Mac 还是 docker for windows?

标签: postgresql docker networking docker-compose docker-desktop


【解决方案1】:

我假设您不是在 linux 上本地运行,而是使用一些 Docker for Desktop。然后简短的回答是:删除network_mode: host,撰写设置将与您的 docker run 命令的工作方式相同。

version: '3.7'
services:
  database:
      image: postgres:10.6
      restart: always
      ports:
        - "5432:5432"
      environment:
        - POSTGRES_USER=postgres
        - POSTGRES_PASSWORD=p0stgr@s
        - POSTGRES_DB=eagle_eye_local

您提供的两个示例并不完全相同,即使它们在真正的 linux 主机上运行时会导致一些相似的结果(类似于在 linux 主机上您将能够通过 @987654324 访问 postgres 实例的方式@ 在主机上)。

如果您在 Docker for Desktop(Mac 或 Windows)上运行给定的 compose 文件,您必须记住,在这种情况下,有一个 VM 运行您的容器,并且所有命令都传递到该 VM。如果您不使用network_mode: host,Docker 将 (1) 在 VM 上正确公开端口,并且 (2) 在您的主机 (mac/windows) 上设置一些代理进程以将流量转发到 VM。当您使用network_mode: host 启动容器时,这基本上不起作用。

您可以在Ports 列下运行docker ps 时验证已建立的映射。如果您使用network_mode: host 运行,这将为空。

有关更多详细信息,请参阅the docker forum 中的讨论。

【讨论】:

  • 我已经用平台更新了我的问题 - 它是带有 Docker for Desktop 的 Windows 10。我会在家里检查你的答案。谢谢
  • 好的。我很确定单行更改将解决您的问题。也可以在我使用基本相同概念的 Mac 上重现它。
猜你喜欢
  • 2021-10-12
  • 2020-09-08
  • 2019-01-02
  • 2021-05-26
  • 2018-07-03
  • 2021-03-23
  • 2022-01-01
  • 2016-03-08
  • 2017-08-05
相关资源
最近更新 更多