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

我正在使用 Docker,并且我有一个包含 PHP、MySQL、Apache 和 Redis 的堆栈。我现在需要添加 MongoDB,所以我检查了 Dockerfile最新版本和the docker-entrypoint.sh来自 MongoDB Dockerhub 的文件但我找不到从 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 实现同样的效果?有人有经验或解决方法吗?

最佳答案

这里是另一个使用 docker-composejs 脚本的更简洁的解决方案。

此示例假定两个文件(docker-compose.yml 和 mongo-init.js)位于同一个文件夹中。

docker-compose.yml

version: '3.7'

services:
    mongodb:
        image: mongo:latest
        container_name: mongodb
        restart: always
        environment:
            MONGO_INITDB_ROOT_USERNAME: <admin-user>
            MONGO_INITDB_ROOT_PASSWORD: <admin-password>
            MONGO_INITDB_DATABASE: <database to create>
        ports:
            - 27017:27017
        volumes:
            - ./mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js:ro

mongo-init.js

db.createUser(
        {
            user: "<user for database which shall be created>",
            pwd: "<password of user>",
            roles: [
                {
                    role: "readWrite",
                    db: "<database to create>"
                }
            ]
        }
);

然后只需运行以下 docker-compose 命令即可启动服务

docker-compose up --build -d mongodb 

注意:docker-entrypoint-init.d 文件夹中的代码只有在数据库之前从未初始化过的情况下才会执行。

https://stackoverflow.com/questions/42912755/

相关文章:

MongoDB Shell - 访问名称为句​​点的集合?

macos - 使用 OS X 10.10 Yosemite Beta 使用 Homebrew 重新

mongodb - 在 mongodb 和 pymongo 中测试空字符串

mongodb - 使用 pyMongo 创建 ISODate

macos - 如何为 MongoDB 创建配置文件

node.js - 创建使用 Mongoose 更新和保存文档的方法?

java - 使用 Java 将 Java 对象插入 MongoDB 集合

mongodb - 如何在 Mongoose Schema 中表示 MongoDB GeoJSON

python - 使用 PyMongo 将 Pandas 数据框插入 mongodb

node.js - Mongoose:ObjectId 比较失败不一致