Docker Compose中连接指定MongoDB数据库失败求助
问题解决:Mongo-Express 连接 MongoDB 失败(添加 db-name 后)
你的 docker-compose 配置里,添加 MONGO_INITDB_DATABASE: 'db-name' 后出现连接失败,核心原因是MongoDB 的 root 用户默认在 admin 数据库下进行认证,而你给 mongo-express 的连接字符串直接指定了 db-name 作为认证数据库,导致权限验证不通过。
解决方法一:修改连接字符串,指定认证源
直接修改 mongo-express 的 ME_CONFIG_MONGODB_URL,加上 authSource=admin 参数,让它用 admin 库完成认证,再操作 db-name:
ME_CONFIG_MONGODB_URL: mongodb://user:password@mongo:27017/db-name?authSource=admin
解决方法二:创建目标数据库的专用用户(更安全)
如果不想用 root 用户连接 mongo-express,可以给 db-name 创建一个专用用户:
- 在项目根目录新建
mongo-init.js文件,内容如下:
db.createUser({ user: "db-user", pwd: "db-password", roles: [ { role: "readWrite", db: "db-name" } ] });
- 修改 docker-compose 里的 mongo 服务,挂载这个初始化脚本:
services: mongo: # 其他配置不变 volumes: - db:/data/db:rw - ./mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js:ro
- 同时更新 mongo-express 的环境变量,用新用户连接:
ME_CONFIG_MONGODB_ADMINUSERNAME: db-user ME_CONFIG_MONGODB_ADMINPASSWORD: db-password ME_CONFIG_MONGODB_URL: mongodb://db-user:db-password@mongo:27017/db-name
两种方法选其一,重新启动容器即可解决连接问题。
内容的提问来源于stack exchange,提问作者Yurii Hierts
相关产品推荐
相关产品推荐

