如何为微服务创建非root用户以连接到mongodb

时间:2018-11-08 14:56:39

标签: mongodb docker-compose jhipster

在计算机上运行的注册表,网关和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

1 个答案:

答案 0 :(得分:0)

您的用户脚本在admin数据库中定义用户,因此您需要对此admin数据库进行身份验证才能进行连接。

为此,只需在yml文件中添加authentication-database属性:

spring:
    ...
    data:
        mongodb:
            uri: mongodb://james:xxxx@localhost:27017
            database: shortvideo
            authentication-database: admin