一段时间以来,我一直在运行MongoDB容器,现在我需要在不丢失所有数据的情况下向数据库中插入一些数据(我可以做docker system prune --volumes,但这会擦除所有数据)。 / p>
我写了一个脚本,可以完成所有这一切:
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
答案 0 :(得分:0)
我的猜测是,最初为MONGO_INITDB_ROOT_USERNAME
和/或MONGO_INITDB_ROOT_PASSWORD
创建的数据库具有不同的值。
这些变量仅用于初始化全新DB上的root用户。只要您的数据库存在,就不再使用它们。您已经发现,docker-entrypoint-initdb.d
中的脚本也是如此。
这可能是您的db.auth('root','example');
通话失败的原因。
如果您忘记了凭据,可以reset the root password。