[当所有这些都在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
您应该使用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_PORT为8001
,而container port为5432
(postgres默认)。联网的[[service-to-service通信使用CONTAINER_PORT。定义HOST_PORT时,也可以在群集外部访问该服务。
postgres://db:5432
,而在主机上,连接字符串看起来像postgres://{DOCKER_IP}:8001
。