You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker Compose中应用连接MongoDB被拒绝问题排查求助

MongoDB连接拒绝问题排查

问题描述

在docker-compose.yml中配置了mongodb与infrastructure服务,运行docker-compose时,infrastructure应用抛出连接localhost:27017被拒绝的错误,但并未在应用中主动尝试连接mongodb,询问是否遗漏了配置。

配置详情

version: '3.7'
networks:
 app-tier:
  driver: bridge

mongodb:
image: 'bitnami/mongodb:latest'
container_name: "mongodb"
environment:
  MONGODB_INITIAL_PRIMARY_HOST: mongodb
  MONGODB_ADVERTISED_HOSTNAME: mongodb
  MONGODB_REPLICA_SET_MODE: primary
  MONGODB_INITDB_DATABASE: testdb
  MONGODB_REPLICA_SET_NAME: rs0
  ALLOW_EMPTY_PASSWORD: 'yes'
ports:
  - "27017:27017"
volumes:
  - ./scripts/mongorestore.sh:/docker-entrypoint-initdb.d/mongorestore.sh
  - ./data/mongodb:/data/mongodb
networks:
  - app-tier


infrastructure:
 build:
  context: .
  dockerfile: Dockerfile
  target: base
container_name: infra
environment:
  - SPRING_PROFILES_ACTIVE=dev
  - KAFKA_BROKERS=kafka:9092
  - REDIS_ENDPOINT=redis
  - APP_NAME=infrastructure
volumes:
  - ~/.m2:/root/.m2
depends_on:
  - "kafka"
  - "redis"
  - "mongodb"   
networks:
  - app-tier

错误信息

error connecting to host: could not connect to server: server selection error: server selection timeout, current topology: { Type: Single, Servers: [{ Addr: localhost:27017, Type: Unknown, Last error: connection() error occured during connection handshake: dial tcp 127.0.0.1:27017: connect: connection refused }, ] }

排查与解决

核心原因

报错明确显示应用在尝试连接localhost:27017,即便你没主动写连接代码,大概率是以下场景导致:

  1. Spring框架自动触发连接
    从环境变量SPRING_PROFILES_ACTIVE能看出这是Spring应用,如果项目中引入了spring-boot-starter-data-mongodb或相关MongoDB依赖,Spring会默认尝试连接localhost:27017,哪怕你没显式配置连接参数。
  2. 第三方依赖/初始化脚本暗中发起连接
    检查应用的启动逻辑、初始化脚本,或是监控、日志类第三方组件,是否默认配置了MongoDB连接。
  3. Docker网络认知误区
    Docker容器内的localhost指向容器自身,而非宿主机或MongoDB容器。即便需要连接MongoDB,也应该用服务名mongodb作为地址,而非localhost。

解决方案

  • 若确实不需要MongoDB连接:

    1. 移除infrastructure服务depends_on中的mongodb,避免不必要的依赖等待。
    2. 检查项目依赖,移除spring-boot-starter-data-mongodb等MongoDB相关依赖。
  • 若需要MongoDB连接:
    在infrastructure的环境变量中添加MongoDB连接配置,替换默认的localhost地址:

    infrastructure:
      # 其他配置...
      environment:
        # 已有变量...
        - SPRING_DATA_MONGODB_URI=mongodb://mongodb:27017/testdb?replicaSet=rs0
    

内容的提问来源于stack exchange,提问作者ppb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 11:36:14