У меня есть файл docker compose, который создает экземпляр mongo db и инициализирует его новым корневым именем пользователя и паролем с настройками конфигурации MONGO_INITDB_ROOT_USERNAME
и MONGO_INITDB_ROOT_PASSWORD
, аналогично принятому ответу в этом связанном вопросе SO.Как и ожидалось, это работает правильно на моей машине MacOSX Mojave - 10.14.5 с Docker Desktop 2.1.0.3.
Однако мы попытались заставить это работать на машине моего коллеги, но новый пользователь не был создан.Ожидаемое сообщение «Успешно добавленный пользователь» не появляется при запуске, и аутентификация завершается неудачно.Мы оба используем одну и ту же ОС и версию Docker Desktop.
Вопрос: Почему это работает на некоторых компьютерах, но не на других?Какие шаги я могу предпринять для устранения проблемы?
Я подумываю написать сценарий для создания пользователя-администратора и поместить его в docker-entrypoint-initdb.d
.Однако в настройке Docker явно что-то не так, и я бы предпочел исследовать решение.
Ожидаемый результат (работает на моей машине, не работает на другой машине):
Successfully added user: {
"user" : "example",
"roles" : [
{
"role" : "root",
"db" : "admin"
}
]
}
docker-compose.yml
version: '3.5'
services:
example:
container_name: example
image: mongo:3.6-xenial
restart: unless-stopped
env_file:
- '/pathtoenv/.env'
environment:
- MONGO_INITDB_ROOT_USERNAME=${MONGO_USERNAME}
- MONGO_INITDB_ROOT_PASSWORD=${MONGO_PASSWORD}
ports:
- "27017:27017"
.env
MONGO_USERNAME=example
MONGO_PASSWORD=password
ОБНОВЛЕНИЕ:
Я написал скрипт sh для создания пользователя.Сценарий монтируется в контейнер как том, и, поскольку он помещается в docker-entrypoint-initdb.d, он запускается автоматически.Я также прокомментировал MONGO_INITDB_ROOT_USERNAME
и MONGO_INITDB_ROOT_PASSWORD
- но мне все еще определенно очень любопытно, почему эти параметры конфигурации не работают на некоторых машинах.
docker-compose.yml
version: '3.5'
services:
example:
container_name: example
image: mongo:3.6-xenial
restart: unless-stopped
env_file:
- '/pathtoenv/.env'
# Does not work on some machines only
#environment:
#- MONGO_INITDB_ROOT_USERNAME=${MONGO_USERNAME}
#- MONGO_INITDB_ROOT_PASSWORD=${MONGO_PASSWORD}
ports:
- "27017:27017"
volumes:
# Workaround for MONGO_INITDB_ROOT_USERNAME not working on some machines
- ./mongo/mongo-init:/docker-entrypoint-initdb.d
. / Mongo / mongo-init / mongo-init.sh
mongo -- "${MONGO_AUTH_SOURCE}" <<EOF
db.createUser(
{
"user": "${MONGO_USERNAME}",
"pwd": "${MONGO_PASSWORD}",
"roles": [
{ "role": "root", "db": "${MONGO_AUTH_SOURCE}" },
]
}
);
EOF