spring - 如何在同一个 docker compose 中使用两个 mongodb 实例
问题描述
我的 docker compose 文件如下所示:
version: '3.9'
# Services
services:
service-one:
....
environment:
STOCK_DB: stock
STOCK_USER: appUser
STOCK_PASS: appPass
STOCK_PORT: 27020
STOCK_HOST: mongo-db-one
networks:
- backend
....
service-two:
....
environment:
STOCK_DB: stock
STOCK_USER: appUser
STOCK_PASS: appPass
STOCK_PORT: 27021
STOCK_HOST: mongo-db-two
networks:
- backend
....
mongo-db-one:
build:
context: ./mongoDb-config
dockerfile: Dockerfile-one
image: mongo-db-one
container_name: mongo-db-one
ports:
- :27020
environment:
MONGO_INITDB_DATABASE: stock
MONGO_INITDB_ROOT_USERNAME: appUser
MONGO_INITDB_ROOT_PASSWORD: appPass
entrypoint: ["mongod","--config","/etc/mongod.conf"]
networks:
- backend
mongo-db-two:
build:
context: ./mongoDb-config
dockerfile: Dockerfile-two
image: mongo-db-two
container_name: mongo-db-two
ports:
- :27021
environment:
MONGO_INITDB_DATABASE: stock
MONGO_INITDB_ROOT_USERNAME: appUser
MONGO_INITDB_ROOT_PASSWORD: appPass
entrypoint: ["mongod","--config","/etc/mongod.conf"]
networks:
- backend
现在我的 mongo 配置文件是:
对于 mongo-one.conf:
net:
port: 27020
bindIp: 0.0.0.0
对于 mongo-two.conf:
net:
port: 27021
bindIp: 0.0.0.0
Dockerfile-一:
FROM mongo:latest
ADD mongo-init.js /docker-entrypoint-initdb.d/mongo-init.js
ADD ./mongo-one.conf /etc/mongod.conf
Dockerfile-二:
FROM mongo:latest
ADD mongo-init.js /docker-entrypoint-initdb.d/mongo-init.js
ADD ./mongo-two.conf /etc/mongod.conf
我的 mongo-init.js:
db.createUser(
{
user: "appUser",
pwd: "appPass",
roles: [
{
role: "readWrite",
db: "stock"
}
]
}
);
我在这里创建两个实例,它们将被两个不同的服务使用。两个 mongodbs 都会有一个数据库“股票”。
mongo db 都已启动,但是当服务 service-one 和 service-two 尝试查询 mongo dbs 时,它们会给出以下错误:
{"t":{"$date":"2021-06-04T07:20:25.033+00:00"},"s":"I", "c":"ACCESS", "id":20249, "ctx":"conn2","msg":"Authentication failed","attr":{"mechanism":"SCRAM-SHA-1",
"speculative":false,"principalName":"appUser","authenticationDatabase":"stock","remote":"192.168.16.13:36310","extraInfo":{},"error":"UserNotFound: Could not find user \"appUser\" for db \"stock\""}}
service-one 和 service-two 都是 spring boot 应用程序,它们在 application.properties 中使用以下属性:
# Data source
spring.data.mongodb.authentication-db=${STOCK_DB}
spring.data.mongodb.username=${STOCK_USER}
spring.data.mongodb.password=${STOCK_PASS}
spring.data.mongodb.database=${STOCK_DB}
spring.data.mongodb.port=${STOCK_PORT}
spring.data.mongodb.host=${STOCK_HOST}
我需要知道错误是什么。另外,我必须使用两个不同的 mongo 实例,这是强制性要求。
解决方案
推荐阅读
- c# - 过滤器定义
- 如何查询数组中的对象? - python - 将数据拆分为训练和测试
- c# - 如何使用 C# 反射来获取实例化的属性或不为空的类类型的属性
- javascript - 从父级但不从子级删除标签
- javascript - 自定义订单标题耗时过长
- javascript - 如何为 html 表构建行排序(水平排序)?
- javascript - 无法将所有整数日期转换为字符串
- javascript - 为什么设置边距会在桌面和移动设备上产生两个不同的值?
- c# - 如何使用带有起始索引和 RegexOptions 的 Regex.Matches
- javascript - 用非常相似的正则表达式拆分字符串后输出奇怪的不同