运行docker-compose up时mongo-express无法连接MongoDB求助
解决Mongo-Express连接MongoDB的问题
核心问题:服务名称不匹配
你的docker-compose配置中,MongoDB服务的名称是mongodb,但Mongo-Express的ME_CONFIG_MONGODB_SERVER配置项写的是mongo——Docker内部服务间通信必须使用正确的服务名称,这是导致连接失败的主要原因。
修复步骤
修正Mongo-Express的服务地址配置
将ME_CONFIG_MONGODB_SERVER的值从mongo改为mongodb,与你的MongoDB服务名保持一致:mongo-express: image: mongo-express restart: always environment: ME_CONFIG_MONGODB_ADMINUSERNAME: root ME_CONFIG_MONGODB_ADMINPASSWORD: 1234 ME_CONFIG_MONGODB_SERVER: mongodb # 此处改为mongodb ME_CONFIG_MONGODB_PORT: 27017 depends_on: - mongodb ports: - 8081:8081处理MongoDB启动延迟问题
depends_on仅保证服务启动顺序,无法确保MongoDB完成初始化(比如创建管理员用户、初始化数据库)后再启动Mongo-Express。可以给MongoDB添加健康检查,让Mongo-Express等数据库真正就绪后再启动:
修改MongoDB服务配置,添加健康检查规则:mongodb: image: mongo:latest ports: - "27017:27017" environment: - MONGO_INITDB_ROOT_USERNAME=root - MONGO_INITDB_ROOT_PASSWORD=1234 - MONGO_INITDB_DATABASE=mydatabase volumes: - mongodb_data:/data/db healthcheck: test: ["CMD", "mongosh", "--eval", "db.adminCommand('ping')"] interval: 10s timeout: 5s retries: 5同时更新Mongo-Express的
depends_on配置,依赖MongoDB的健康状态:mongo-express: # 其他配置保持不变 depends_on: mongodb: condition: service_healthy清理旧容器并重启服务
先停止并删除现有容器,避免缓存影响:docker-compose down docker-compose up -d
验证修复
服务启动后,访问http://localhost:8081,若能正常打开Mongo-Express管理界面,说明连接问题已解决。
内容的提问来源于stack exchange,提问作者Louis
相关产品推荐
相关产品推荐

