我正在使用 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-compose
和 js
脚本的更简洁的解决方案。
此示例假定两个文件(docker-compose.yml 和 mongo-init.js)位于同一个文件夹中。
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
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/