我有许多具有架构验证规则的集合,我想使用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>
有人对我要去哪里出错有任何建议吗?