Docker容器之间的连接问题:连接被拒绝。

3
当所有内容在docker外部独立运行时,核心尝试从cerner获取时没有问题。然而,当所有内容都像下面一样被docker化时,我会得到以下错误:获取http://cerner:8602/api/v1/patient/search:拨号TCP 192.168.240.4:8602:连接:连接被拒绝。 .4是cerner容器的IP,.2是核心容器的IP。Cerner是从核心调用的容器的名称。如果我将名称更改为主机服务器的IP地址并使用端口,则也可以正常工作。它只是不允许使用容器DNS或IP进行容器对容器的通信。我已经尝试过使用和不使用私有网络,并且得到了相同的结果。这些容器都是scratch go。
version: '3.7'

services:    caConnector:
      image: vertisoft/ca_connector:latest
      ports:
        - "8601:7001"
      env_file:
        - .env.ca_connector
      networks:
        - core-net

   fhir:
      image: vertisoft/fhir_connector:latest
      container_name: cerner
      ports:
        - "8602:7002"
      env_file:
        - .env.fhir_connector
      networks:
        - core-net

   core:
      image: vertisoft/core:latest
      ports:
        - "8600:7000"
      env_file:
        - .env.core
      networks:
        - core-net

networks:   core-net:
    driver: bridge

服务名称为 fhir。您应该能够使用 fhir 而不是 cerner 来连接它。 - Burak Serdar
1个回答

2
您应该在服务与服务之间的通信中使用containerPort而不是hostPort来调用容器服务。在您的情况下,任何容器都可以使用容器名称连接,端口应为7000至7002
引述错误信息:

获取http://cerner:8602/api/v1/patient/search:拨号TCP 192.168.240.4:8602:连接被拒绝。

正如错误信息所示,它尝试使用发布端口进行连接。
例如:
version: "3"
services:
  web:
    build: .
    ports:
      - "8000:8000"
  db:
    image: postgres
    ports:
      - "8001:5432"

当你运行docker-compose up时,会发生以下事情:
- 创建一个名为myapp_default的网络。 - 使用web的配置创建一个容器。它加入了名为myapp_default的网络,并使用名称web。使用db的配置创建一个容器。它加入了名为myapp_default的网络,并使用名称db。 - 在v2.1+中,覆盖网络始终是可附加的。 - 现在,每个容器都可以查找主机名web或db,并返回相应容器的IP地址。例如,web的应用程序代码可以连接到URL postgres://db:5432,并开始使用Postgres数据库。
需要注意HOST_PORT和CONTAINER_PORT之间的区别。在上面的示例中,对于db,HOST_PORT是8001,容器端口是5432(postgres默认值)。网络服务之间的通信使用CONTAINER_PORT。当定义HOST_PORT时,服务也可以在Swarm外部访问。
在Web容器内,您连接到数据库的字符串看起来像这样:postgres://db:5432,而从主机机器上,连接字符串看起来像这样:postgres://{DOCKER_IP}:8001compose-networking

请在您的回答中使用OP的示例,因为您使用的示例有两个8000端口,更加令人困惑。另外,postgres://{DOCKER_IP}:8001为什么要引用镜像名称?谢谢! - Austin L
1
当您想要从容器网络外部或主机访问Postgres容器时,应使用8001,因为它是外部世界将看到的发布端口,而5432仅在容器网络中可见。@AustinL - Adiii

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接