Docker 容器到容器连接:连接被拒绝

当所有内容都在 docker 外部独立运行时,当核心尝试从 cerner 获取数据时,它可以正常工作。但是,当所有内容都进行了 dockerized 时,执行相同的操作,如下所示:


获取http://cerner:8602/api/v1/patent/search:拨打 TCP 192.168.240.4:8602: connect: 连接被拒绝。.4是cerner容器的IP,.2是core容器的IP


Cerner 是从核心调用的容器的名称。如果我将名称更改为主机服务器的 IP 地址并使用端口,它也可以正常工作。它只是不允许容器之间使用容器 DNS 或 IP。我尝试过使用和不使用专用网络并得到相同的结果。


容器都是从头开始的。


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


杨魅力
浏览 367回答 1
1回答

桃花长相依

您应该使用 来调用容器服务containerPort,而不是使用服务到服务通信中的 hostPort 来调用。在您的情况下,任何容器都应该7000 to 7002使用容器名称进行连接。获取http://cerner:8602/api/v1/patent/search:拨打 TCP 192.168.240.4:8602: connect: 连接被拒绝。正如错误中所示,它尝试使用发布端口进行连接。例如version: "3"services:  web:    build: .    ports:      - "8000:8000"  db:    image: postgres    ports:      - "8001:5432"当您运行 docker-compose up 时,会发生以下情况:创建一个名为 myapp_default 的网络。容器是使用 web 的配置创建的。它以 web 名称加入网络 myapp_default。使用数据库的配置创建容器。它以 db 名称加入网络 myapp_default。在 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 容器中,到 db 的连接字符串将类似于postgres://db:5432,而在主机上,连接字符串将类似于postgres://{DOCKER_IP}:8001。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go