You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 13:16:18