在docker-compose中连接两个容器时拒绝连接

时间:2018-09-21 09:28:23

标签: asp.net .net docker docker-compose containers

我是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” ...发生了什么?

2 个答案:

答案 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