当前位置: 首页 > 面试题库 >

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

容磊
2023-03-14
问题内容

我正在使用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)
}


 类似资料:
  • 问题内容: 要启动容器,我输入以下命令: 但我想在此容器中打开外壳以键入mongo命令。我应该运行什么命令来执行相同的操作? 问题答案: 您可以通过运行以下命令来运行交互式mongo shell: 否则,如果您的容器已经在运行,则可以使用以下命令:

  • testcontainers oracleContainer在Dokerfile中定义的entrypoint发生更改之前启动,以完成并创建测试所需的用户。 容器运行后,将执行一些sql脚本创建表并用数据填充表。这些脚本失败,因为脚本中提到的用户尚未创建。 testcontainers没有等待完成安装。 通过使用以下命令检查日志: 我可以看到testcontainers从不等待它完成。 关于这个“b

  • 问题内容: 好的,我正在制作我的第一个ruby应用程序。谁知道将所有内容转移到“生产”是如此复杂。到目前为止,我一直在努力配置乘客,让它在启动时运行,然后让Redis在启动时运行。 我的最后一个任务是在启动时添加1个工作程序。现在,我必须ssh并运行我的rake命令。显然,当我想关闭ssh时,这样做不好。所以我只是真的不知道下一步是什么或下一步是什么。 我试着将resque默认配置复制到confi

  • 问题内容: 假设我有一个要运行的Docker容器,那么我可以调用 一切都很好。如果系统崩溃并重新启动,是否有内置的方式来运行容器,使其能够自动重新启动? 如果是这样,这在Docker Compose中也可用吗? 问题答案: 是的,docker具有重启策略,该策略可以处理此问题。这也可以在compose.yml配置文件中找到。

  • 假设我有一个要运行的Docker容器,然后我可以调用 一切都很好。是否有一种内置方法可以运行容器,以便在系统崩溃并重新启动时自动重新启动容器? 如果是这样,这在 Docker Compose 中是否也可用?

  • 我想在启动Postgres Docker映像后创建一个数据库。