Node.js 网桥网络docker中公开特定端口的Mongo服务
我有一个示例应用程序,它由三部分组成:Node.js 网桥网络docker中公开特定端口的Mongo服务,node.js,mongodb,docker,docker-compose,Node.js,Mongodb,Docker,Docker Compose,我有一个示例应用程序,它由三部分组成: mongo数据库 节点api(服务器端) angular web应用程序(客户端) 目标是将这三个部分封装起来并运行应用程序。 为了达到这个目的,我创建了如下的docker compose.yml文件: # docker-compose -f docker-compose.prod.yml build # docker-compose -f docker-compose.prod.yml up -d # docker-compose -f docker
- mongo数据库
- 节点api(服务器端)
- angular web应用程序(客户端)
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
mongodb:
image: mongo
container_name: mongodb-instance-microservices
ports:
- "27017:27017"
networks:
- microservices-network
在服务器端,我正在运行mainapp.js
,它正试图使用以下连接字符串连接到mongodb:
mongodb://mongodb-instance-microservices:27020/TestDatabase
问题是服务器无法连接到mongo db容器。
我尝试公开mongo的默认端口,如下所示:
# 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
mongodb:
image: mongo
container_name: mongodb-instance-microservices
ports:
- "27017:27017"
networks:
- microservices-network
并更新app.js文件中的连接字符串,如下所示:
mongodb://mongodb-instance-microservices:27017/TestDatabase
而且工作很好
问题是如何为mongo容器公开不同的端口并使其正常工作?当您使用Docker内部网络在服务之间连接时,始终连接到服务的内部端口。您不需要显式地发布端口(在Compose中,使用
ports:
指令);如果这样做,您要连接的端口就是右边的端口
就样式而言,还需要注意的是,您不需要手动声明带有默认选项的专用网络,这些默认选项将仅在Docker Compose文件中使用(Compose将为您执行类似的操作),并且您不需要仅为容器间连接而声明容器名称:
(Compose将添加与服务名称匹配的网络别名)