如何在Docker化的Mongo DB中初始化一个集合

7

以下是我用来将MongoDB实例容器化的docker-compose.yml文件:

version: '3.3'

services:
  mongo:
    image: 'mongo:latest'
    ports:
      - '27017:27017'
    volumes:
      - 'data-storage:/data/db'
    networks:
      mynet:

volumes:
  data-storage:

networks:
  mynet:

容器已经正确创建并且没有遇到任何问题。是否可以在容器启动时第一次创建一个Mongo集合(collection),并将其填充一些文档(documents)?

例如,我想运行一些类似这样的语句:

db.strategyitems.insert( { symbol: "chf", eval_period: 15, buy_booster: 8.0, sell_booster: 5.0, buy_lot: 0.2, sell_lot: 0.2 } )
db.strategyitems.insert( { symbol: "eur", eval_period: 15, buy_booster: 8.0, sell_booster: 5.0, buy_lot: 0.2, sell_lot: 0.2 } )
db.strategyitems.insert( { symbol: "usd", eval_period: 15, buy_booster: 8.0, sell_booster: 5.0, buy_lot: 0.2, sell_lot: 0.2 } )

...


2个回答

8
根据 MongoDB docker文档,您可以使用以下组合来初始化数据库: 环境变量MONGO_INITDB_DATABASE
该变量允许您指定要用于创建脚本的数据库名称,位于/docker-entrypoint-initdb.d/*.js中(请参见下面的初始化新实例)。 MongoDB基本上是为“首次使用创建而设计的”,因此如果您没有使用JavaScript文件插入数据,则不会创建任何数据库。
还需要在/docker-entrypoint-initdb.d/中初始化 .js 文件。
初始化新实例 当容器首次启动时,它将执行在/docker-entrypoint-initdb.d中找到的扩展名为.sh和.js的文件。文件将按字母顺序执行。如果存在MONGO_INITDB_DATABASE变量,则 .js 文件将由mongo使用指定的数据库执行,否则为test。您还可以在 .js 脚本中切换数据库。
请注意,您可以跳过设置环境变量,并在js文件中设置数据库。有关更多解释,请参阅文档。 希望能对您有所帮助。

0
在您的docker-compose文件中使用MONGO_INITDB_DATABASE环境变量来指定要使用的数据库名称,并将您的db.createCollection()命令添加到一个.js文件中。
my-app-directory
├── docker-compose.yml
└── init-mongo-db-with-collections.js

docker-compose.yml

version: '3.1'

services:

  mongo:
    image: mongo
    restart: unless-stopped
    ports:
      - "27017:27017"
    environment:
      MONGO_INITDB_ROOT_USERNAME: xxx
      MONGO_INITDB_ROOT_PASSWORD: xxx
      MONGO_INITDB_DATABASE: my-db
    volumes:
      - ./init-mongo-db-with-collections.js:/docker-entrypoint-initdb.d/init-mongo-db-with-collections.js:ro

init-mongo-db-with-collections.js

db.createCollection("my-empty-collection")
db.strategyitems.insert( { symbol: "chf", eval_period: 15, buy_booster: 8.0, sell_booster: 5.0, buy_lot: 0.2, sell_lot: 0.2 } )
...

my-db
└── collections
    ├── my-empty-collection
    └── `strategyitems`
        └── { symbol: "chf", eval_period: 15, buy_booster: 8.0, sell_booster: 5.0, buy_lot: 0.2, sell_lot: 0.2 }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接