如何在启动时为MongoDB容器创建数据库?

我正在使用Docker,并且拥有PHP,MySQL,Apache和Redis的堆栈。我现在需要添加MongoDB,因此我正在检查Dockerfile中的最新版本以及MongoDB

Dockerhub中的docker-

entrypoint.sh文件,但是我找不到设置默认数据库,管理员用户/密码以及可能进行身份验证的方法文件中容器的方法。docker-

compose.yml

在MySQL中,您可以设置一些ENV变量,例如:

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图片已经合并公关,包括功能,在启动时创建用户和数据库。

/data/db目录中未填充任何内容时,数据库初始化将运行。

管理员用户设置

用于控制“ root”用户设置的环境变量是

  • 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在命令行上使用,因为docker entrypoint.sh脚本会在环境变量存在时将其添加到命令行中。

数据库初始化

该映像还提供了/docker-entrypoint-

initdb.d/部署自定义.js.sh设置脚本的路径,这些脚本将在数据库初始化时运行一次。默认情况下或在环境中定义时,将.js针对test这些脚本运行脚本MONGO_INITDB_DATABASE

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

要么

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

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

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)

}

以上是 如何在启动时为MongoDB容器创建数据库? 的全部内容, 来源链接: utcz.com/qa/422992.html

回到顶部