我已经构建了两个共享一个公共数据库的NEST应用。我一直在尝试找出一种方法来使这两个应用程序从Mongo数据库容器中获取数据。我一直坚持这个过程。
带有应用程序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
带有app-2的docker-compose.yml
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
答案 0 :(得分:0)
由于您使用的是2个不同的docker-compose.yml
,因此实际上是在2个docker-networks
上运行了2个后端和2个mongodb
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网络才能访问该容器。