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

问题描述 投票:0回答:1

[当所有这些都在docker之外独立运行时,当核心尝试从cerner获取数据时,它毫无问题。然而,当所有的都被如下化时,我做的是:

获取http://cerner:8602/api/v1/patient/search:拨打TCP 192.168.240.4:8602:连接:连接被拒绝。 .4是cerner容器的IP,.2是核心容器的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
docker go docker-compose
1个回答
1
投票

您应该使用containerPort调用容器服务,而不是使用服务中的hostPort进行通信服务。您的情况下,使用容器名称进行连接的任何容器都应为7000 to 7002

获取http://cerner:8602/api/v1/patient/search:拨打TCP192.168.240.4:8602:连接:连接被拒绝。

由于错误,它尝试使用发布端口尝试连接。

例如

version: "3"
services:
  web:
    build: .
    ports:
      - "8000:8000"
  db:
    image: postgres
    ports:
      - "8001:5432"

[当您运行docker-compose up时,会发生以下情况:

创建了一个名为myapp_default的网络。

已创建一个容器使用网络的配置。它在下面加入网络myapp_default网站名称。容器是使用db的配置创建的。它以db名称加入网络myapp_default。

在v2.1 +中,覆盖网络始终是可附加的

每个容器现在都可以查找主机名web或db并取回相应容器的IP地址。例如,网络应用代码可以连接到URL postgres:// db:5432并开始使用Postgres数据库。

重要的是要注意HOST_PORT和CONTAINER_PORT之间的区别。在上面的示例中,对于db,HOST_PORT8001,而container port5432(postgres默认)。联网的[[service-to-service通信使用CONTAINER_PORT。定义HOST_PORT时,也可以在群集外部访问该服务。

在Web容器中,您与db的连接字符串看起来像postgres://db:5432,而在主机上,连接字符串看起来像postgres://{DOCKER_IP}:8001

compose-networking

© www.soinside.com 2019 - 2024. All rights reserved.