【问题标题】:How to Initialize a Collection in Dockerized Mongo DB如何在 Dockerized Mongo DB 中初始化集合
【发布时间】:2018-08-02 21:41:09
【问题描述】:

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

version: '3.3'

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

volumes:
  data-storage:

networks:
  mynet:

容器已正确创建,并且启动时没有任何问题。是否可以在容器第一次启动时创建一个 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 } )

...

【问题讨论】:

标签: mongodb docker docker-compose


【解决方案1】:

根据MongoDB docker documentation,您可以使用此组合来初始化您的数据库: 环境变量 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 文件中设置您的数据库。见the doc for more explanations.

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-15
    • 1970-01-01
    • 1970-01-01
    • 2019-05-17
    • 2018-10-05
    • 2016-03-30
    相关资源
    最近更新 更多