为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
杨魅力 2023-07-26 20:03:37
当所有内容都在 docker 外部独立运行时,当核心尝试从 cerner 获取数据时,它可以正常工作。但是,当所有内容都进行了 dockerized 时,执行相同的操作,如下所示:获取http://cerner:8602/api/v1/patent/search:拨打 TCP 192.168.240.4:8602: connect: 连接被拒绝。.4是cerner容器的IP,.2是core容器的IPCerner 是从核心调用的容器的名称。如果我将名称更改为主机服务器的 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-netnetworks:   core-net:    driver: bridge
查看完整描述

1 回答

?
桃花长相依

TA贡献1860条经验 获得超8个赞

您应该使用 来调用容器服务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。


查看完整回答
反对 回复 2023-07-26
  • 1 回答
  • 0 关注
  • 366 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信