在桥网络泊坞窗中暴露了具有特定端口的Mongo服务

时间:2018-08-07 09:50:11

标签: node.js mongodb docker docker-compose

我有一个包含三个部分的示例应用程序:

  • mongo数据库
  • 节点api(服务器端)
  • 角度网络应用程序(客户端)

目标是将这三个部分容器化并运行应用程序。 为此,我已经创建了docker-compose.yml文件,如下所示:

# docker-compose -f docker-compose.prod.yml build
# docker-compose -f docker-compose.prod.yml up -d
# docker-compose -f docker-compose.prod.yml down

    version: '3'

    services:

      mongodb:
        image: mongo
        container_name: mongodb-instance-microservices    
        ports: 
          - "27020:27017"
        networks:
          - microservices-network

      client:
        container_name: client-instance-microservices
        image: client-microservices
        build:
          context: ./client
          dockerfile: prod.dockerfile
        ports:
          - "8080:80"
          - "443:443"
        depends_on:
           - api
        networks:
          - microservices-network

      api:
        container_name: api-instance-microservices
        image: api-microservices
        build:
          context: ./server
          dockerfile: server.dockerfile
        environment:
          - NODE_ENV=production
        ports:
          - "3000:3000"
        depends_on:
           - mongodb
        networks:
          - microservices-network

    networks:
      microservices-network:
        driver: bridge

在服务器端,我正在运行主app.js,它正尝试使用以下连接字符串连接到mongodb:

  

mongodb:// mongodb-instance-microservices:27020 / TestDatabase

问题是服务器无法连接到mongo db容器。 我试图公开mongo的默认端口,如下所示:

  mongodb:
        image: mongo
        container_name: mongodb-instance-microservices    
        ports: 
          - "27017:27017"
        networks:
          - microservices-network

并像这样更新app.js文件中的连接字符串:

  

mongodb:// mongodb-instance-microservices:27017 / TestDatabase

就可以了。

问题是如何为mongo容器公开不同的端口并使其正常工作?

1 个答案:

答案 0 :(得分:0)

使用Docker内部网络在服务之间进行连接时,始终连接至服务的内部端口。您不需要显式发布端口(在Compose中,使用ports:指令);如果这样做,您要连接的端口就是右侧上的端口。

从样式上讲,还请注意,您无需使用默认选项手动声明专用网络,该默认选项仅在此Docker Compose文件中使用(Compose将为您提供与之非常相似的功能),而您无需无需声明container_name:仅用于容器间的连接(Compose将添加与服务名称匹配的网络别名)。