Docker Compose环境下Mongo-Express与MongoDB认证失败求助
MongoDB认证失败问题修复方案
核心问题1:主机名不匹配
你的MongoDB服务在docker-compose里叫mongodb,但mongo-express的连接字符串写的是mongo,容器间通信必须用服务名,直接修改连接字符串:
ME_CONFIG_MONGODB_URL=mongodb://admin:password@mongodb:27017/?authSource=admin
同时Node应用的连接地址也要同步改成mongodb,并加上authSource=admin参数——因为你创建的是root管理员用户,默认在admin库下完成认证。
核心问题2:服务启动顺序不等于就绪
depends_on仅保证mongo-express和Node应用在MongoDB之后启动,但MongoDB启动后还需要完成用户初始化,此时直接连接会失败。
Node应用:安装
wait-on包等待MongoDB就绪,修改command配置:app: # ... 其他配置 command: yarn wait-on mongodb://admin:password@mongodb:27017 && yarn dev先执行
yarn add wait-on -D安装依赖。mongo-express:添加循环等待脚本,确保MongoDB可连接后再启动:
mongo-express: # ... 其他配置 command: sh -c 'until nc -z mongodb 27017; do sleep 1; done; node app.js'如果镜像没有
nc工具,可替换为curl或使用自带工具的镜像。
兜底方案:清理旧数据卷
若之前启动过MongoDB,mongodbdata卷可能留存未初始化用户的旧数据,导致新用户名密码不生效。直接删除卷后重启:
docker-compose down -v docker-compose up --build
最后检查Node应用的.env文件
确保应用读取的MongoDB连接字符串为:
MONGODB_URI=mongodb://admin:password@mongodb:27017/?authSource=admin
内容的提问来源于stack exchange,提问作者Giovanni Bianciardi
相关产品推荐
相关产品推荐

