Как создать некорневого пользователя для микросервиса для подключения к mongodb - PullRequest
0 голосов
/ 08 ноября 2018

реестр, шлюз и uaa работают на компьютере, при этом один микросервис работает на другом компьютере, микросервис использует mongodb для сохранения данных, mongodb находится на одном компьютере с микросервисом.

Я следую этому сообщению , чтобы создать пользователя при использовании «docker-compose -f app.yml up», но ошибка «переменная PWD не установлена», однако PWD определяется в текущем оболочки.

После того, как я обошел подсистему $ PWD с ~ / docker /, возникает другая ошибка:

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, как показано ниже (относится к монго):

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

Когда я выполняю локальную отладку, я вручную настраиваю mongodb с созданием пользователя без полномочий root, и микросервис может успешно зарегистрироваться в реестре, поэтому я подозреваю, что причина связана с инициализацией 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

и user.sh в ~ / docker / mongo-entrypoint /, как показано ниже:

#!/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) выглядит следующим образом:

mongorelated:

 - SPRING_DATA_MONGODB_URI=mongodb://hdshortvideo-mongodb:27017
 - SPRING_DATA_MONGODB_DATABASE=shortvideo

1 Ответ

0 голосов
/ 08 ноября 2018

Ваш пользовательский сценарий определяет пользователя в базе данных администратора, поэтому вам нужно пройти аутентификацию по этой базе данных администратора для подключения.

Для этого просто добавьте свойство authentication-database в свой файл yml:

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