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。
- 1 回答
- 0 关注
- 366 浏览
添加回答
举报