我想创建一个MongoDB数据库并在使用docker-compose的Docker容器启动时用大量集合填充它

时间:2019-07-25 19:51:08

标签: mongodb docker-compose

我有许多具有架构验证规则的集合,我想使用docker-compose up --build命令在Docker容器启动时使用这些集合来填充数据库。

由于存在如此众多的集合,因此我将这些集合分为不同的js文件,以期希望清理目录结构,代码组织和可读性。每个js文件都会导出格式为

的变量
export const CollectionDeps = ["NameOfCollection", obj]; 

其中对象是json模式验证器。例如,

obj = {
  validator: {
    $jsonSchema: {
      bsonType: "object",
      required: [...], // required fields
      properties: {
        Field1: { ... },
        Field2: { ... },
        Field3: { ... }
      }
    }
  }
}

我正在Ubuntu 18.04上运行,并使用来自DockerHub(https://hub.docker.com/_/mongo)的官方mongo映像。我尝试遵循某人在此问题中提出的方法(https://stackoverflow.com/a/54064268/3716628),但仍未实现我想要的结果。

目录结构

home
| -- user
     | -- ssl-data
          | -- server.pem
     | -- scripts
          | -- collections
               | -- Collection1
                    | - collection1a.js
                    | - collection1b.js
               | -- Collection2
                    | - collection2a.js
          mongo-init.js

docker-compose.yml

version: '3.7'

services:
  mongodb:
    image: mongo
    container_name: mongodb
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: example
      MONGO_INITDB_DATABASE: my_test_db
    ports:
      - 27017:27017
    volumes:
      - ./ssl-data/server.pem:/etc/ssl/server.pem
      - ./persistent-storage-mongo:/data/db
      - ./scripts/collections:/docker-entrypoint-initdb.d/collections
      - ./scripts/mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js:ro
    command:
      - --sslMode=requireSSL
      - --sslPEMKeyFile=/etc/ssl/server.pem
      - --sslPEMKeyPassword=somepassword
      - --sslAllowInvalidCertificates
      - --sslAllowInvalidHostnames

collections / CollectionX / collectionXn.js

export const CollectionXn = ["CollectionXn", obj] // see above for what obj is

mongo-init.js

db.auth('root', 'example');
db = db.getSiblingDB('my_test_db')

// Collection1 schemas
import Collection1a from 'collections/Collection1/collection1a.js'
import Collection1b from 'collections/Collection1/collection1b.js'
db.createCollection(Collection1a[0], Collection1a[1]);
db.createCollection(Collection1b[0], Collection1b[1]);
// Collection2 schemas
import Collection2a from 'collections/Collection2/collection2a.js'
db.createCollection(Collection2a[0], Collection2a[1]);

运行docker-compose up --build -d mongodb后,容器将启动,我可以按照配置配置使用ssl连接到它并访问mongodb,但是尚未创建数据库(my_test_db)和集合。 / p>

有人对我要去哪里出错有任何建议吗?

0 个答案:

没有答案