node.js - 使多个 Node js dockerized 应用程序与 mongodb docker 通信
问题描述
我已经构建了两个共享公共数据库的 NEST 应用程序。我一直在想办法让这两个应用程序从 Mongo db 容器中获取数据。我被这个过程困住了。
带有应用程序 1 的 docker-compose.yml
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
解决方案
由于您使用的是 2 个不同docker-compose.yml
的,您实际上在 2 个上运行 2 个后端和 2 个 mongodbdocker-networks
2个mongo之一不会启动,因为端口已经被占用。
选项1(更好):
services:
backend_1:
...
ports:
- '8888:8888'
backend_2:
...
ports:
- '8899:8899'
mongodb:
ports:
- '27017:27017'
此设置在同一网络上提供 3 个容器。现在您可以从两个后端访问 mongo<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 网络才能访问容器。
推荐阅读
- objective-c - 1:many:many 模型中的 NSArrayController 绑定细节
- c# - 当我尝试调用实例对象时出现空引用异常
- cocoa - MacOS / appkit NSPrint 逻辑,用于打印长而复杂的报告
- javascript - Sqlite如何访问每个具有特定值的用户
- postgresql - 如何根据时间戳更新最新记录 - Postgres
- tensorflow - Tensorflow 数据集地图功能问题
- html - 无法让字间距 CSS 属性正常工作
- android - ImageView 上的阴影效果
- python-3.x - 如何使用 pipe() 和 apply() 根据条件更新数据框列
- javascript - 在 for 循环中将布尔值评估为真或假