MongoDB Docker初始化脚本

时间:2020-10-23 21:39:58

标签: mongodb docker docker-compose

我正在尝试将我的MongoDB植入Docker。 我的docker-compose.yml文件非常简单,这是我的 音量:

...
volumes:
      - ./mongo/init-mongo.js:/docker-entrypoint-initdb.d/init-mongo.js:ro
      - ./mongo/mongod.conf:/etc/mongod.conf:ro
      - ./mongo/mongo-volume:/data/db
...

我已将init-mongo.js映射为一个卷,这是其内容:

db.createUser({
  user: 'root',
  pwd: 'toor',
  roles: [
    {
      role: 'readWrite',
      db: 'testDB',
    },
  ],
});
db.createCollection('users', { capped: false });
db.createCollection('test', { capped: false });

db.test.insert([
  { "item": 1 },
  { "item": 2 },
  { "item": 3 },
  { "item": 4 },
  { "item": 5 }
]);

创建用户root和数据库testDB以及集合userstest都没有问题。

问题在于db.test.insert([])似乎一起丢失了,没有文档插入test集合中。

任何想法为何如此? 我绝对很乐意让这个工作正常进行,并非常感谢您提供的任何帮助。

谢谢, -凯文

2 个答案:

答案 0 :(得分:3)

将您的init-mongo.js文件更改为该文件,以首先选择新数据库,然后创建集合,最后将数据植入其中:

db.createUser({
    user: 'root',
    pwd: 'toor',
    roles: [
        {
            role: 'readWrite',
            db: 'testDB',
        },
    ],
});

db = new Mongo().getDB("testDB");

db.createCollection('users', { capped: false });
db.createCollection('test', { capped: false });

db.test.insert([
    { "item": 1 },
    { "item": 2 },
    { "item": 3 },
    { "item": 4 },
    { "item": 5 }
]);

然后登录到mongo shell(使用mongo -u [admin_username] -p)并检查testDB集合中的数据:

use testDB;
db.getCollection('test').find()

这将显示:

{ "_id" : ObjectId("5f947906cc845282e5711728"), "item" : 1 }
{ "_id" : ObjectId("5f947906cc845282e5711729"), "item" : 2 }
{ "_id" : ObjectId("5f947906cc845282e571172a"), "item" : 3 }
{ "_id" : ObjectId("5f947906cc845282e571172b"), "item" : 4 }
{ "_id" : ObjectId("5f947906cc845282e571172c"), "item" : 5 }

答案 1 :(得分:0)

我认为您已连接到管理数据库,对吗?用户通常是在管理数据库上创建的。

在运行插入操作之前,请尝试使用“ testDB”数据库重新初始化数据库。