Docker中mongo-express连接Mongo容器失败:名称无法解析,配置被覆盖
问题分析与解决方案
1. 「name does not resolve」错误修复
这个错误的核心原因是mongo-express与Mongo容器不在同一个Docker用户定义网络,默认bridge网络不支持容器名称解析,导致无法通过容器名找到Mongo服务。
操作步骤:
- 创建自定义网络:
docker network create mongo-network - 启动Mongo容器时指定该网络:
docker run -d --name mongodb --network mongo-network -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=password mongo - 启动mongo-express时加入同一个网络:
docker run -d --name mongo-express --network mongo-network -e ME_CONFIG_MONGODB_SERVER=mongodb -e ME_CONFIG_MONGODB_ADMINUSERNAME=admin -e ME_CONFIG_MONGODB_ADMINPASSWORD=password -p 8081:8081 mongo-express
2. 认证配置被覆盖问题解决
配置被覆盖通常是环境变量未正确传递,或容器未关联到正确的Mongo服务导致mongo-express启用默认配置。以下是修正后的docker-compose.yml:
version: '3.8' services: mongodb: image: mongo container_name: mongodb networks: - mongo-network environment: MONGO_INITDB_ROOT_USERNAME: admin MONGO_INITDB_ROOT_PASSWORD: password volumes: - mongo-data:/data/db # 增加健康检查,确保Mongo就绪后再启动mongo-express healthcheck: test: ["CMD", "mongosh", "--eval", "db.adminCommand('ping')"] interval: 10s timeout: 5s retries: 5 mongo-express: image: mongo-express container_name: mongo-express networks: - mongo-network environment: ME_CONFIG_MONGODB_SERVER: mongodb ME_CONFIG_MONGODB_ADMINUSERNAME: admin ME_CONFIG_MONGODB_ADMINPASSWORD: password # 可选:设置mongo-express自身的基础认证 ME_CONFIG_BASICAUTH_USERNAME: me-admin ME_CONFIG_BASICAUTH_PASSWORD: me-password ports: - "8081:8081" depends_on: mongodb: condition: service_healthy networks: mongo-network: driver: bridge volumes: mongo-data:
关键注意事项:
- 所有环境变量名称必须严格匹配,比如
ME_CONFIG_MONGODB_SERVER的值要和Mongo容器名mongodb完全一致; depends_on配合健康检查,避免mongo-express在Mongo未就绪时启动,导致配置加载异常。
3. 验证操作
- 检查容器网络归属,确认两者在同一网络:
docker inspect mongodb | grep Networks docker inspect mongo-express | grep Networks - 查看mongo-express日志,确认连接成功:
日志中出现docker logs mongo-expressMongo Express server listening at http://0.0.0.0:8081且无连接错误,即为配置生效。
内容的提问来源于stack exchange,提问作者Oliver xu
相关产品推荐
相关产品推荐

