使多个 Node js docker 化的应用程序与 mongodb docker 通信
Make multiple Node js dockerized app communcate to mongodb docker
我构建了两个共享公共数据库的 NEST 应用程序。我一直在想办法让这两个应用程序从 Mongo 数据库容器中获取数据。我坚持这个过程。
docker-compose.yml 应用程序 1
version: '3'
services:
backend:
image: 'example-image_1:1.0.0'
working_dir: /app/example-app-1/backend/example-app-1-api
environment:
- DB_URL=mongodb://0.0.0.0:27017/example_app_1
- BACKEND_PORT=3333
- BACKEND_IP=0.0.0.0
restart: always
network_mode: "host"
ports:
- '3333:3333'
command: ['node', 'main.js']
depends_on:
- mongodb
expose:
- 3333
mongodb:
image: 'mongo:latest'
environment:
- 'MONGODB_DATABASE="example_app_1"'
ports:
- '27017:27017'
expose:
- 27017
docker-compose.yml 与 app-2
version: '3'
services:
backend:
image: 'example_app_2:1.0.0'
working_dir: /app/example_app_2/backend/example-app-2-api
environment:
- DB_URL=mongodb://0.0.0.0:27017/example_app_2
- BACKEND_PORT=8888
- BACKEND_IP=0.0.0.0
restart: always
ports:
- '8888:8888'
command: ['node', 'main.js']
expose:
- 8888
mongodb:
image: 'mongo:latest'
environment:
- 'MONGODB_DATABASE="example_app_2"'
ports:
- '27017:27017'
expose:
- 27017
我需要帮助让这些应用程序与通用容器通信 - mongodb
Click link for Architecture Setup
由于您使用的是 2 个不同的 docker-compose.yml
,您实际上是 运行 2 个后端和 2 个 mongodb on 2 docker-networks
2 mongo 中的一个将无法启动,因为端口已被占用。
选项 1(更好):
services:
backend_1:
...
ports:
- '8888:8888'
backend_2:
...
ports:
- '8899:8899'
mongodb:
ports:
- '27017:27017'
此设置在同一网络上提供 3 个容器。
现在您可以从 <mongo_ip>:27017
的两个后端访问 mongo
选项2(丑):
services:
backend:
...
ports:
- '8888:8888'
mongodb:
ports:
- '27017:27017'
并在另一个 docker-compose
services:
backend:
...
ports:
- '8888:8888'
此设置在 2 个不同的网络上提供 3 个容器。
在此设置中,每个 docker-compose.yml
都有自己的 docker 网络,因此您必须从第二个后端服务连接到另一个 docker 网络才能访问容器。
我构建了两个共享公共数据库的 NEST 应用程序。我一直在想办法让这两个应用程序从 Mongo 数据库容器中获取数据。我坚持这个过程。
docker-compose.yml 应用程序 1
version: '3'
services:
backend:
image: 'example-image_1:1.0.0'
working_dir: /app/example-app-1/backend/example-app-1-api
environment:
- DB_URL=mongodb://0.0.0.0:27017/example_app_1
- BACKEND_PORT=3333
- BACKEND_IP=0.0.0.0
restart: always
network_mode: "host"
ports:
- '3333:3333'
command: ['node', 'main.js']
depends_on:
- mongodb
expose:
- 3333
mongodb:
image: 'mongo:latest'
environment:
- 'MONGODB_DATABASE="example_app_1"'
ports:
- '27017:27017'
expose:
- 27017
docker-compose.yml 与 app-2
version: '3'
services:
backend:
image: 'example_app_2:1.0.0'
working_dir: /app/example_app_2/backend/example-app-2-api
environment:
- DB_URL=mongodb://0.0.0.0:27017/example_app_2
- BACKEND_PORT=8888
- BACKEND_IP=0.0.0.0
restart: always
ports:
- '8888:8888'
command: ['node', 'main.js']
expose:
- 8888
mongodb:
image: 'mongo:latest'
environment:
- 'MONGODB_DATABASE="example_app_2"'
ports:
- '27017:27017'
expose:
- 27017
我需要帮助让这些应用程序与通用容器通信 - mongodb
Click link for Architecture Setup
由于您使用的是 2 个不同的 docker-compose.yml
,您实际上是 运行 2 个后端和 2 个 mongodb on 2 docker-networks
2 mongo 中的一个将无法启动,因为端口已被占用。
选项 1(更好):
services:
backend_1:
...
ports:
- '8888:8888'
backend_2:
...
ports:
- '8899:8899'
mongodb:
ports:
- '27017:27017'
此设置在同一网络上提供 3 个容器。
现在您可以从 <mongo_ip>:27017
选项2(丑):
services:
backend:
...
ports:
- '8888:8888'
mongodb:
ports:
- '27017:27017'
并在另一个 docker-compose
services:
backend:
...
ports:
- '8888:8888'
此设置在 2 个不同的网络上提供 3 个容器。
在此设置中,每个 docker-compose.yml
都有自己的 docker 网络,因此您必须从第二个后端服务连接到另一个 docker 网络才能访问容器。