У меня уже некоторое время работает контейнер MongoDB, и теперь мне нужно вставить некоторые данные в базу данных, не теряя все данные (я мог бы сделать prune system prune --volumes, но это сотрет все данные).
Я написал скрипт, который бы делал все это:
db.auth('root', 'example');
db.createUser(
{ user: "admin",
pwd: "admin",
roles:[{role: "root" , db:"admin"}]})
db = db.getSiblingDB('dev');
db.approver.insert({"email":"some@email.com","approverType":"APPROVER"});
db.approver.insert({"email":"someother@email.com","approverType":"ACCOUNTANCY"});
db.approver.insert({"email":"another@email.com","approverType":"ACCOUNTANCY"});
Я расширил свой docker-compose, чтобы скопировать мой config.js
файл в docker-entrypoint-initdb.d
.
Воссоздание контейнера ничего не делает, так как скрипт не выполняется.
Я обнаружил, что MongoDB запускает скрипты в docker-entrypoint-initdb.d
только один раз.
Когда я пытаюсь запустить скрипт вконтейнер, используя mongo
cli, я получаю:
root@038a4fb0736e:/docker-entrypoint-initdb.d# mongo config.js
MongoDB shell version v4.0.5
connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("c21d3faa-93a3-4da1-9a8c-b3ebce178929") }
MongoDB server version: 4.0.5
Error: Authentication failed.
2019-06-07T09:31:31.872+0000 E QUERY [js] Error: couldn't add user: command createUser requires authentication :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
DB.prototype.createUser@src/mongo/shell/db.js:1491:15
@config.js:3:1
failed to load: config.js
Есть ли способ правильно запустить этот скрипт?Или способ авторизовать меня для создания пользователя с правами администратора?
Фрагмент docker-compose:
mongodb:
image: mongo:latest
restart: always
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: example
MONGO_INITDB_DATABASE: dev
volumes:
- ./config.js:/docker-entrypoint-initdb.d/config.js
- mongodbdata:/data/db
networks:
mongonetwork:
volumes:
mongodbdata:
networks:
mongonetwork:
external: true