如何在启动时为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-compose
configurationauthentication来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理数据库与给定的密码。
- 用最新版本的应用程序更新图像的Dockerstream程
- sbt-docker无效的头字段值“oci …运行时错误:没有这样的文件错误
- Docker将应用程序(服务)日志存储在一个文件夹中,并及时清除它们
- 创buildBigInsights(IBM Hadoop)Docker镜像,sysctl问题
- 如何在Docker Remote API中发送curl?
- docker运行pseudoTTY(-t)即时标准输出,缓冲发生没有它
- 为.net集装箱化应用程序创build一个CIpipe道
- 如何让这个工作? Dockerfile FROM {YourPrivateRepo.azurecr.io/some/repo}
- Docker的Windows主机networking堆栈使用