Docker容器连接MongoDB出现MongoServerError: Authentication failed求助
MongoDB容器认证失败排查方案
你的配置与问题
docker-compose文件:
version: '3' services: mongo: image: mongo container_name: mongo restart: always environment: - MONGO_INITDB_ROOT_USERNAME: admin - MONGO_INITDB_ROOT_PASSWORD: root ports: - 27017:27017 volumes: - ./mongo-data:/data/db command: --wiredTigerCacheSizeGB 1.5
报错信息:
MongoServerError: Authentication failed
已尝试的连接字符串:
mongodb://admin:root@localhost:27017/admin mongodb://admin:root@localhost:27017/admin?authSource=admin
解决步骤
修复docker-compose环境变量格式
你的环境变量写法错误,Docker Compose里环境变量必须用=而非:,修正后:environment: - MONGO_INITDB_ROOT_USERNAME=admin - MONGO_INITDB_ROOT_PASSWORD=root关键:Mongo的初始化只在第一次启动容器且数据卷为空时执行,所以必须删除旧数据卷,重新启动:
rm -rf ./mongo-data docker-compose down docker-compose up -d进入容器验证账号有效性
直接在容器内部用mongo shell登录,确认账号密码是否正确:docker exec -it mongo mongosh -u admin -p root --authenticationDatabase admin能进入shell说明账号没问题,问题在连接端;如果还是认证失败,回到第一步确认环境变量修改和数据卷清理是否彻底。
检查端口是否被占用
本地可能有其他Mongo实例占用27017端口,导致你连接的不是容器里的服务:# Linux/macOS lsof -i :27017 # Windows netstat -ano | findstr :27017若有其他进程占用,停止该进程,或者修改docker-compose端口映射为
27018:27017,用新端口连接。调整连接字符串细节
尝试用127.0.0.1代替localhost,避免DNS解析问题:mongodb://admin:root@127.0.0.1:27017/admin?authSource=admin如果是在代码中使用,检查是否有字符串转义问题(比如密码含特殊字符时需要转义,但你的情况暂时不需要)。
查看容器启动日志
检查Mongo初始化过程是否有错误:docker logs mongo搜索
initdb相关日志,确认root用户是否成功创建。
内容的提问来源于stack exchange,提问作者Ishimura_Hideo
相关产品推荐
相关产品推荐

