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

Docker环境下mongo-express无法连接MongoDB的认证问题求助

解决MongoDB 4.4.18 + mongo-express 认证失败问题(树莓派4 64位Raspbian环境)

1. 核对.env文件配置

确保.env里的变量名和后续配置完全对应,示例配置如下:

# MongoDB 初始化配置
MONGO_INITDB_ROOT_USERNAME=root
MONGO_INITDB_ROOT_PASSWORD=你的安全密码
MONGO_INITDB_DATABASE=admin

# mongo-express 配置
ME_CONFIG_MONGODB_ADMINUSERNAME=root
ME_CONFIG_MONGODB_ADMINPASSWORD=你的安全密码
ME_CONFIG_MONGODB_SERVER=mongo

重点注意:MONGO_INITDB_DATABASE必须设为admin,因为root用户是在admin库下创建的;ME_CONFIG_MONGODB_SERVER要和docker-compose中Mongo服务的名称一致(示例中为mongo)。

2. 修正初始化脚本init-mongo.sh

很多认证失败源于初始化脚本没有正确在admin库执行,或者语法错误。替换为以下脚本:

#!/bin/bash
set -e

# 在admin库创建root用户(避免重复创建)
mongo admin --eval "
if (!db.getUser('$MONGO_INITDB_ROOT_USERNAME')) {
  db.createUser({
    user: '$MONGO_INITDB_ROOT_USERNAME',
    pwd: '$MONGO_INITDB_ROOT_PASSWORD',
    roles: [{ role: 'root', db: 'admin' }]
  });
}"

# 创建Unifi所需的数据库和专用用户
mongo --eval "
db.getSiblingDB('unifi').createUser({
  user: 'unifi_user',
  pwd: 'unifi_passwd',
  roles: [{ role: 'dbOwner', db: 'unifi' }]
});
db.getSiblingDB('unifi_stat').createUser({
  user: 'unifi_user',
  pwd: 'unifi_passwd',
  roles: [{ role: 'dbOwner', db: 'unifi_stat' }]
});
"

给脚本添加执行权限:chmod +x init-mongo.sh,确保脚本能被Mongo容器正确执行。

3. 清理旧数据卷,重新初始化

如果之前的初始化失败,数据卷中会残留错误配置,必须彻底清理:

  • 停止并删除容器及关联数据卷:docker-compose down -v
  • 检查是否有遗漏的Mongo数据卷:docker volume ls,若有则用docker volume rm <卷名>删除
  • 重新启动服务:docker-compose up -d

4. 检查docker-compose.yml配置

确保Mongo和mongo-express在同一网络,挂载配置正确,示例配置如下:

version: '3.8'

services:
  mongo:
    image: mongo:4.4.18
    container_name: mongo
    environment:
      - MONGO_INITDB_ROOT_USERNAME=${MONGO_INITDB_ROOT_USERNAME}
      - MONGO_INITDB_ROOT_PASSWORD=${MONGO_INITDB_ROOT_PASSWORD}
      - MONGO_INITDB_DATABASE=${MONGO_INITDB_DATABASE}
    volumes:
      - ./init-mongo.sh:/docker-entrypoint-initdb.d/init-mongo.sh:ro
      - mongo_data:/data/db
    networks:
      - unifi_network
    restart: unless-stopped

  mongo-express:
    image: mongo-express:latest
    container_name: mongo-express
    environment:
      - ME_CONFIG_MONGODB_ADMINUSERNAME=${ME_CONFIG_MONGODB_ADMINUSERNAME}
      - ME_CONFIG_MONGODB_ADMINPASSWORD=${ME_CONFIG_MONGODB_ADMINPASSWORD}
      - ME_CONFIG_MONGODB_SERVER=mongo
      # 可选:给mongo-express加基础认证
      - ME_CONFIG_BASICAUTH_USERNAME=me_admin
      - ME_CONFIG_BASICAUTH_PASSWORD=me_passwd
    ports:
      - "8081:8081"
    networks:
      - unifi_network
    depends_on:
      - mongo
    restart: unless-stopped

volumes:
  mongo_data:

networks:
  unifi_network:
    driver: bridge

5. 验证用户创建结果

启动容器后,进入Mongo容器验证用户:

  1. 执行命令:docker exec -it mongo mongosh -u root -p 你的安全密码 --authenticationDatabase admin
  2. 查看admin库用户:show users,确认root用户存在
  3. 切换到unifi库:use unifi,执行show users确认unifi专用用户存在

如果用户仍未创建,查看Mongo日志排查错误:docker logs mongo,重点看初始化脚本的执行输出。

内容的提问来源于stack exchange,提问作者Galaxus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 08:10:29