在计算机上运行的注册表,网关和uaa,在另一台计算机上运行一个微服务,该微服务使用mongodb保存数据,而mongodb与该微服务在同一台计算机中。
我在使用“ docker-compose -f app.yml up”时遵循此post来创建用户,但是错误“未设置PWD变量”,但是PWD在当前shell中定义。
用〜/ docker /替换$ PWD后,发生另一个错误:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mongobee' defined in class path resource [com/james/shortvideo/config/DatabaseConfiguration.class]: Invocation of init method failed; nested exception is com.mongodb.MongoQueryException: Query failed with error code 13 and error message 'there are no users authenticated' on server hdshortvideo-mongodb:27017
application-prod.yml如下(与mongo相关):
spring:
...
data:
mongodb:
uri: mongodb://james:xxxx@localhost:27017
database: shortvideo
在本地调试时,我手动创建了具有非root用户身份的mongodb,并且微服务可以成功在注册表中注册,因此我怀疑原因与mongodb初始化有关。有什么建议吗?
mongodb.yml如下:
version: '2'
services:
hdshortvideo-mongodb:
image: mongo:3.6.3
environment:
- MONGO_INITDB_ROOT_USERNAME=root
- MONGO_INITDB_ROOT_PASSWORD=password
ports:
- "27017:27017"
volumes:
- ~/volumes/HDShortVideo/mongodb/:/data/db/
- ~/docker/mongo-entrypoint/:/docker-entrypoint-initdb.d/
command: mongod
和〜/ docker / mongo-entrypoint /中的user.sh如下:
#!/usr/bin/env bash
echo "Creating mong users..."
mongo --authenticationDatabase admin --host localhost -u root -p xxxxx --eval "db.createUser({user: 'james', pwd: 'xxxxx', roles: [{role: 'readWrite', db: 'shortvideo'}]}); db.createUser({user: 'admin', pwd: 'xxxx', roles: [{role: 'userAdminAnyDatabase', db: 'admin'}]});"
echo "Mongo users created."
================================================ === hdshortvideo-app(来自app.yml)的环境如下:
与猴子相关:
- SPRING_DATA_MONGODB_URI=mongodb://hdshortvideo-mongodb:27017
- SPRING_DATA_MONGODB_DATABASE=shortvideo
答案 0 :(得分:0)
您的用户脚本在admin数据库中定义用户,因此您需要对此admin数据库进行身份验证才能进行连接。
为此,只需在yml文件中添加authentication-database属性:
spring:
...
data:
mongodb:
uri: mongodb://james:xxxx@localhost:27017
database: shortvideo
authentication-database: admin