如何在 Dockerized Mongo DB 中初始化集合

j3d*_*j3d 4 mongodb docker docker-compose

下面是docker-compose.yml我用来 dockerize 我的 MongoDB 实例的代码:

version: '3.3'

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

volumes:
  data-storage:

networks:
  mynet:
Run Code Online (Sandbox Code Playgroud)

容器已正确创建,并且启动时没有任何问题。是否可以在容器第一次启动时创建一个 Mongo 集合并用一些文档填充它?

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

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 } )
Run Code Online (Sandbox Code Playgroud)

...

mat*_*Pen 6

根据MongoDB docker 文档,您可以使用此组合来初始化您的数据库:环境变量 MONGO_INITDB_DATABASE

此变量允许您指定用于在 /docker-entrypoint-initdb.d/*.js 中创建脚本的数据库的名称(请参阅下面的初始化新实例)。MongoDB 从根本上设计为“首次使用时创建”,因此如果您不使用 JavaScript 文件插入数据,则不会创建任何数据库。

和 /docker-entrypoint-initdb.d/ 中的 init .js 文件

初始化一个新实例

当容器第一次启动时,它将执行扩展名为 .sh 和 .js 的文件,这些文件位于 /docker-entrypoint-initdb.d 中。文件将按字母顺序执行。.js 文件将由 mongo 使用 MONGO_INITDB_DATABASE 变量指定的数据库(如果存在)执行,否则进行测试。您还可以在 .js 脚本中切换数据库。

请注意,您可以跳过设置环境变量,并在 js 文件中设置您的数据库。有关更多解释,请参阅文档。

希望能帮助到你。