使用Docker Compose连接Spring应用与MongoDB时遇连接拒绝问题求助
解决方案
1. 修复端口不匹配问题
错误日志显示应用在尝试连接mongodb:27070,但你配置的端口是27017,说明配置被覆盖:
- 检查代码中是否有硬编码的MongoDB端口
- 排查是否存在其他配置文件(如
application-dev.properties)或环境变量覆盖了spring.data.mongodb.port - 可直接在
docker-compose.yml的web服务中添加环境变量强制指定端口:web: build: context: . dockerfile: Dockerfile ports: - '5000:5000' depends_on: - mongodb environment: - SPRING_DATA_MONGODB_PORT=27017
2. 处理MongoDB启动就绪延迟
depends_on只保证容器启动顺序,不保证MongoDB服务完全就绪,可通过以下方式解决:
- 在
application.properties中添加连接超时与重试相关配置:spring.data.mongodb.connect-timeout=10000 spring.data.mongodb.socket-timeout=10000 spring.data.mongodb.max-wait-time=10000 - 用
healthcheck配合depends_on的健康检查条件(Docker Compose 3.8+支持):mongodb: image: mongo:latest ports: - 27017:27017 healthcheck: test: ["CMD", "mongo", "--eval", "db.adminCommand('ping')"] interval: 5s timeout: 5s retries: 5 web: build: context: . dockerfile: Dockerfile ports: - '5000:5000' depends_on: mongodb: condition: service_healthy
3. 验证容器间网络连通性
如果以上方法无效,手动排查网络:
- 进入web容器执行
ping mongodb确认域名解析正常 - 执行
telnet mongodb 27017测试端口是否可达
内容的提问来源于stack exchange,提问作者meirfuces
相关产品推荐
相关产品推荐

