Docker 容器从 docker-compose 中的 postgres 容器获取连接被拒绝

Docker container getting connection refused from postgres container in docker-compose

几天来我一直在为此苦苦思索,在尝试自己从各地寻找解决方案后,我终于寻求帮助。

我有一个 docker-compose 文件,如下所示:

services:
   db:
      image: ...
      container_name: db
      ports:
         - "8095:5432"
      networks:
         - mynetwork
   springservice:
      image: ...
      container_name: springservice
      depends_on:
         - db
      ports:
         - "8090:8090"
      networks:
         - mynetwork
      environment:
         - SPRING_DATASOURCE_URL: jdbc:postgresql://db:8095/dbname
         - SPRING_DATASOURCE_USER: user
         - SPRING_DATASOURCE_PASSWORD: password
networks:
   mynetwork:
      driver: bridge
      name: mynetwork

Postgres 必须放到另一个端口,因为我们在那个 compose 中有 3 个 postgres 容器,所以每个容器都有自己的端口。

Postgres 的 listen_address 设置为“*”。 pg_hba 设置为“host all 0.0.0.0/0 md5”

两个容器都出现了,但是当我从服务容器 curl 到 http://db:8095/ 时,连接被拒绝。

我在这里错过了什么?

您的端口映射在 docker 网络中没有意义。这只是到主机系统的映射。在网络内部,容器在其 本地端口 .

上始终可用
 - SPRING_DATASOURCE_URL: jdbc:postgresql://db:5432/dbname

另请注意,您无需发布端口即可从网络内部访问它。对数据库这样做可能会带来安全风险。如果可以,则不应发布它。这样,它只能从 docker 网络内部访问。