Я пытаюсь использовать docker в моем существующем проекте. У меня есть два дополнительных сервиса: redis и mongodb. У меня возникла проблема с созданием пользователя и аутентификацией этого пользователя для использования базы данных. Я не хочу запускать контейнер (docker exe c -it ...) и создавать пользователя и предоставлять там разрешение. Таким образом, каждый разработчик должен делать это на своей машине. Вместо этого я хочу иметь скрипт, который запускается при создании образа mongodb.
Вот как я пытаюсь
const {
DATABASE_HOST,
DATABASE_PORT,
DATABASE_DBNAME,
DATABASE_DBUSER,
DATABASE_DBPASS,
} = require('../configs');
console.log('DATABASE', DATABASE_HOST);
db.createUser({
user: DATABASE_DBUSER,
pwd: DATABASE_DBPASS,
roles: [
{
role: 'readWrite',
db: DATABASE_DBNAME,
},
],
});
docker -compose.yml
version: "3.7"
# Lets define all our services (i.e. our containers to run)
services:
# create a mongodb database
travel-db:
image: mongo
container_name: "travel-db"
env_file:
- ./.env
volumes:
- ./src/helpers/mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js:ro
- "mongodb:/data/db/"
# opening mongodb port so that it can be connected from host
ports:
- "27017:27017"
# create redis-server
travel-redis-server:
image: redis:latest
container_name: "travel-redis-server"
env_file:
- ./.env
volumes:
- redis:/data/
ports:
- "6379:6379"
# express app
travel-express-server:
image: "travel-express-server"
container_name: "travel-express-server"
env_file:
- ./.env
volumes:
- .:/usr/src/app
ports:
- "8000:8000"
volumes:
mongodb: {}
redis: {}
Я получаю следующую ошибку:
ОБНОВЛЕНИЕ
Я изменил mon go -init. js на
db.createUser({
user: 'traveluser',
pwd: 'travel123',
roles: [
{
role: 'readWrite',
db: 'travel_db',
},
],
});
он затем говорит следующее
Successfully added user: {
travel-db | "user" : "traveluser",
travel-db | "roles" : [
travel-db | {
travel-db | "role" : "readWrite",
travel-db | "db" : "travel_db"
travel-db | }
travel-db | ]
travel-db | }
, но все еще получает ошибку при аутентификации
SASL SCRAM-SHA-1 authentication failed for traveluser on travel_db from client 172.20.0.4:36562 ; UserNotFound: Could not find user "traveluser" for db "travel_db"
, если я использую
environment:
- MONGO_INITDB_ROOT_USERNAME=admin
- MONGO_INITDB_ROOT_PASSWORD=pass
, а затем прокомментируйте следующий - ./src/helpers/mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js:ro
и измените переменную env с правами администратора, тогда он будет работать, но не иначе, как admin.