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