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

Docker容器到容器连接:连接被拒绝,docker,go,docker-compose,Docker,Go,Docker Compose,当所有这些都在docker之外独立运行时,当core尝试从cerner获取数据时,它不会有任何问题。但是,当所有对象都按如下方式停靠时,我会执行相同的操作: 获取:拨打TCP 192.168.240.4:8602:connect:连接被拒绝。.4是cerner容器的IP,.2是核心容器的IP Cerner是从core调用的容器的名称。如果我将名称更改为主机服务器的ip地址并使用端口,它也可以正常工作。它只是不允许容器到容器使用容器DNS或IP。我尝试了使用和不使用专用网络,得到了同样的结果 所有

当所有这些都在docker之外独立运行时,当core尝试从cerner获取数据时,它不会有任何问题。但是,当所有对象都按如下方式停靠时,我会执行相同的操作:

获取:拨打TCP 192.168.240.4:8602:connect:连接被拒绝。.4是cerner容器的IP,.2是核心容器的IP

Cerner是从core调用的容器的名称。如果我将名称更改为主机服务器的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

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

获取:拨号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_ 这个名字叫web。容器是使用db的配置创建的。信息技术 加入名为db的网络myapp_default

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

每个容器现在都可以查找主机名web或db并返回 适当容器的IP地址。例如,web的应用程序 代码无法连接到URLpostgres://db:5432 然后开始使用 Postgres数据库

请务必注意主机端口和集装箱端口之间的区别。在上面的示例中,对于db,主机端口是
8001
集装箱端口是
5432
(postgres默认)。网络化服务对服务通信使用集装箱港口。定义主机_端口后,也可以在swarm之外访问该服务

在web容器中,到db的连接字符串看起来像
postgres://db:5432
,从主机上看,连接字符串类似于
postgres://{DOCKER\u IP}:8001


服务名称为
fhir
。您应该能够使用
fhir
连接它,而不是
cerner
。在您的回答中,您可以使用OPs示例吗?由于您有两个8000端口,因此使用的端口更容易混淆。另外
postgres://{DOCKER_IP}:8001
为什么会引用图像名称?谢谢大家!@AustinL当您想从容器网络外部或从主机访问Postgres容器时,您应该使用
8001
,因为它是可以看到外部世界的发布端口,而
5432
仅在容器网络中可见。