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容器验证用户:
- 执行命令:
docker exec -it mongo mongosh -u root -p 你的安全密码 --authenticationDatabase admin - 查看admin库用户:
show users,确认root用户存在 - 切换到unifi库:
use unifi,执行show users确认unifi专用用户存在
如果用户仍未创建,查看Mongo日志排查错误:docker logs mongo,重点看初始化脚本的执行输出。
内容的提问来源于stack exchange,提问作者Galaxus
相关产品推荐
相关产品推荐

