如何在docker-compose中配置MongoDB 4的身份验证?
解决Docker Compose配置MongoDB 4身份验证的问题
1. 修正Docker Compose配置
你的docker-compose.yml中MongoDB服务未加载.env变量,也未启用身份验证。修改配置如下,引入官方镜像支持的初始化环境变量,并启动认证模式:
version: '3' services: nodejs-app: image: node:16 container_name: nodejs-container working_dir: /app volumes: - .:/app ports: - "3000:3000" # 传递.env变量给Node应用,用于构建数据库连接字符串 environment: MONGO_USER: ${MONGO_USER} MONGO_PASSWORD: ${MONGO_PASSWORD} MONGO_DB: ${MONGO_DB} MONGO_HOST: mongodb command: - sh - -c - | npm install && npm start mongodb: image: mongo:4 container_name: mongodb-container ports: - "27017:27017" volumes: - ./data/db:/data/db # 使用MongoDB官方镜像的初始化环境变量,首次启动创建管理员用户 environment: MONGO_INITDB_ROOT_USERNAME: ${MONGO_USER} MONGO_INITDB_ROOT_PASSWORD: ${MONGO_PASSWORD} MONGO_INITDB_DATABASE: ${MONGO_DB} # 启动MongoDB时强制启用身份验证 command: mongod --auth
2. 清理旧数据(关键步骤)
如果之前启动过MongoDB容器,./data/db目录中会留存未启用认证的旧数据,导致新配置不生效。在Ubuntu服务器上执行命令清理:
sudo rm -rf ./data/db
3. 重启容器使配置生效
docker-compose down && docker-compose up -d
4. 更新Node应用的数据库连接逻辑
在Node应用中,使用包含认证信息的连接字符串。以Mongoose为例:
const mongoUri = `mongodb://${process.env.MONGO_USER}:${process.env.MONGO_PASSWORD}@${process.env.MONGO_HOST}:27017/${process.env.MONGO_DB}?authSource=admin`; mongoose.connect(mongoUri);
注意:必须添加
authSource=admin,因为通过MONGO_INITDB_ROOT_USERNAME创建的用户归属admin数据库,认证时需要指定该源。
内容的提问来源于stack exchange,提问作者Boruto
相关产品推荐
相关产品推荐

