如何在启动时为MongoDB容器创build一个数据库?

我正在与Docker合作,我有一个与PHP,MySQL,Apache和Redis的堆栈。 我现在需要添加MongoDB,所以我正在检查Dockerfile的最新版本以及来自MongoDB Dockerhub 的docker-entrypoint.sh文件,但是我找不到设置默认数据库,pipe理员用户/密码以及可能auth的方法来自docker-compose.yml文件的容器的方法。

在MySQL中,你可以设置一些ENVvariables,例如:

 db: image: mysql:5.7 env_file: .env environment: MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} MYSQL_DATABASE: ${MYSQL_DATABASE} MYSQL_USER: ${MYSQL_USER} MYSQL_PASSWORD: ${MYSQL_PASSWORD} 

这将设置数据库和用户/密码作为root密码。

有没有办法实现与MongoDB相同的? 任何人都有一些经验或解决方法?

官方的mongo镜像已经合并了PR,包括创build用户和数据库的function 。

数据库初始化将在/data/db目录中没有填充时运行。

pipe理员用户设置

控制“root”用户设置的环境variables是

  • MONGO_INITDB_ROOT_USERNAME
  • MONGO_INITDB_ROOT_PASSWORD

 docker run -d \ -e MONGO_INITDB_ROOT_USERNAME=admin \ -e MONGO_INITDB_ROOT_PASSWORD=password \ mongod 

您不需要/不能在命令行中使用/ --auth ,因为--auth的entrypoint.sh脚本在存在环境variables时添加了此项。

其他自定义设置

该容器还提供了一个path来部署将在数据库初始化时运行一次的自定义.js.sh安装脚本。 .js脚本将在默认情况下针对test运行,如果在环境中定义,脚本将运行MONGO_INITDB_DATABASE

 COPY mysetup.sh /docker-entrypoint-initdb.d/ 

要么

 COPY mysetup.js /docker-entrypoint-initdb.d/ 

一个简单的初始化JavaScript文件,演示日志logging以及如何退出并显示错误(用于结果检查)。

 let error = true let res = [ db.container.drop(), db.container.drop(), db.container.createIndex({ myfield: 1 }, { unique: true }), db.container.createIndex({ thatfield: 1 }), db.container.createIndex({ thatfield: 1 }), db.container.insert({ myfield: 'hello', thatfield: 'testing' }), db.container.insert({ myfield: 'hello2', thatfield: 'testing' }), db.container.insert({ myfield: 'hello3', thatfield: 'testing' }), db.container.insert({ myfield: 'hello3', thatfield: 'testing' }), ] printjson(res) if (error) { print('Error, exiting') quit(1) } 

如果有人正在寻找如何使用docker-composeconfigurationauthentication来configurationMongoDB,下面是一个使用环境variables的示例configuration:

 version: "3.3" services: db: image: mongo environment: - MONGO_INITDB_ROOT_USERNAME=admin - MONGO_INITDB_ROOT_PASSWORD=<YOUR_PASSWORD> ports: - "27017:27017" 

当运行docker-compose up你的mongo实例会自动运行auth启用。 你将有一个pipe理数据库与给定的密码。