Docker Compose中MongoDB与Mongo Express连接失败问题求助
问题分析
从错误日志能看到核心问题:UserNotFound: Could not find user "root" for db "storage",原因是MongoDB的root超级用户默认创建在admin数据库,而你的Mongo Express配置里指定了ME_CONFIG_MONGODB_AUTH_DATABASE=storage,导致它错误地去storage库验证root用户,自然找不到。
另外还有两个次要问题:
depends_on只保证MongoDB先启动,但不等待它完成初始化,可能出现Mongo Express连接时MongoDB还没准备好的情况- 密码里的
#字符在URL中是特殊字符(锚点标记),可能导致连接字符串解析错误
修复后的Docker Compose配置
services: mongodb: container_name: mongodb image: mongo:6.0.5-jammy volumes: - ./data:/data/db ports: - "27017:27017" networks: mongonet: ipv4_address: 172.20.0.10 environment: MONGODB_INITDB_ROOT_USERNAME: root MONGODB_INITDB_ROOT_PASSWORD: password#123 MONGO_INITDB_DATABASE: storage healthcheck: test: ["CMD", "mongosh", "--eval", "db.adminCommand('ping')"] interval: 5s timeout: 5s retries: 5 mongoexpress: depends_on: mongodb: condition: service_healthy image: mongo-express:1.0.0-alpha.4 ports: - "8080:8081" networks: mongonet: ipv4_address: 172.20.0.11 environment: # 移除错误的认证数据库配置,默认使用admin - ME_CONFIG_BASICAUTH_USERNAME=admin - ME_CONFIG_BASICAUTH_PASSWORD=password#123 - ME_CONFIG_MONGODB_SERVER=172.20.0.10 - ME_CONFIG_MONGODB_ADMINUSERNAME=root # 对密码中的#进行URL编码为%23 - ME_CONFIG_MONGODB_ADMINPASSWORD=password%23123 networks: mongonet: driver: bridge ipam: config: - subnet: 172.20.0.0/24 gateway: 172.20.0.1
关键修复点
- 修正认证数据库:移除
ME_CONFIG_MONGODB_AUTH_DATABASE=storage,让Mongo Express默认去admin库验证root用户(也可以显式设置为ME_CONFIG_MONGODB_AUTH_DATABASE=admin) - URL编码密码特殊字符:将密码中的
#替换为%23,避免连接字符串解析错误 - 添加健康检查依赖:给MongoDB加healthcheck,让Mongo Express等待MongoDB完全初始化后再启动,避免连接时机过早
注意事项
如果之前已经启动过容器,./data目录里已经有旧的数据库数据,需要先清理:
rm -rf ./data docker-compose down -v
然后重新启动:
docker-compose up -d
内容的提问来源于stack exchange,提问作者Simple Fellow
相关产品推荐
相关产品推荐

