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

时间:2019-10-09 23:15:28

标签: docker go docker-compose

当所有这些都在docker之外独立运行时,当核心尝试从cerner获取数据时,它没有问题。但是,如下所示,当所有docker化后都执行相同操作:

获取http://cerner:8602/api/v1/patient/search:拨打TCP 192.168.240.4:8602:connect:连接被拒绝。 .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

1 个答案:

答案 0 :(得分:2)

您应该使用containerPort而不是服务中的hostPort调用容器服务来进行通信。您的情况下,使用容器名称进行连接的任何容器都应为7000 to 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的网络。

     

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

     

在v2.1 +中,覆盖   网络总是可连接的

     

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

请务必注意 HOST_PORT与CONTAINER_PORT 之间的区别。在上面的示例中,对于db, HOST_PORT 8001,而容器端口5432(默认为postgres)。联网的服务到服务通信使用 CONTAINER_PORT 。定义HOST_PORT时,也可以在群集外部访问该服务。

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

compose-networking