我是docker的新手,尝试从另一个容器连接到容器时遇到问题。奇怪的是,确实可以联系某些容器,而不能以相同的方式配置其他容器。我在搜寻Google时尝试了数不胜数的修复程序,但没有任何效果。我想这是一个简单的菜鸟错误。
这是我的docker-compose文件:
version: '3.4'
services:
mssql.db.posm:
image: "microsoft/mssql-server-linux"
environment:
SA_PASSWORD: "mypassword"
ACCEPT_EULA: "Y"
MSSQL_PID: "Express"
volumes:
- mssql-data:/var/opt/mssql
ports:
- "1433:1433"
networks:
posm:
api.posm:
image: ${DOCKER_REGISTRY}posm.api
build:
context: .
dockerfile: Posm.Api/Dockerfile
expose:
- "6869"
ports:
- "6869:80"
networks:
posm:
cloud.subscription:
image: ${DOCKER_REGISTRY}cloud.subscription
build:
context: ./Services
dockerfile: Cloud.Subscription/Dockerfile
ports:
- "80"
networks:
posm:
catalogmanager.services.posm:
image: ${DOCKER_REGISTRY}posm.services.catalogmanager
build:
context: ./Services
dockerfile: CatalogManager/Dockerfile
ports:
- "80"
networks:
posm:
aliases:
- services.posm
- catalogmanager
productmanager.services.posm:
image: ${DOCKER_REGISTRY}posm.services.productmanager
build:
context: ./Services
dockerfile: ProductManager/Dockerfile
ports:
- "80"
networks:
posm:
aliases:
- services.posm
- productmanager
localizer.services.posm:
image: ${DOCKER_REGISTRY}posm.services.localizer
build:
context: ./Services
dockerfile: Localizer/Dockerfile
ports:
- "80"
networks:
posm:
aliases:
- services.posm
- localizer
networks:
posm:
volumes:
mssql-data:
因此,当我连接到api.posm时,后者能够成功连接到mssql.db.posm和cloud.subscription。但是,即使我可以从api.posm中解析它们的主机名,它也由于连接拒绝错误而无法连接到“ catalogmanager”和“ productmanager” ...发生了什么?
答案 0 :(得分:0)
您正在为'catalogmanager'和'productmanager'都提供别名services.posm:
posm:
aliases:
- services.posm
- catalogmanager
正如您现在按照文档(https://docs.docker.com/compose/compose-file/#aliases)所述,这会将主机名“ services.posm”赋予posm网络中的容器。这意味着您的网络中有2倍于“ services.posm”主机,并且都暴露了端口80。这将不起作用。删除两个容器别名上的“ services.posm”行,重新启动,您将能够使用catalogmanager和productmanager主机访问它们。
答案 1 :(得分:0)
所以,问题是我的一个映像中的堆栈溢出异常被调试器未处理,因此我看不到。
关于您的答案, Moreno ...
您正在将别名services.posm都赋予'catalogmanager'和 “产品经理”
我在Docker forums上重复了此帖子,以增加获得相关答案的机会,有人建议也是如此。我为三个不同的服务使用相同的别名的原因是,我读到某个地方(当然现在无法找到它),您可以使用相同的别名标记多个服务以进行发现。我可能错了,但是Docker似乎一点都不介意。
因此,尽管如此,还是感谢您的宝贵时间,对不起我对代码的这种愚蠢的误操作感到困扰。
底线是: DOCKER ROCKS