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

Docker部署Spring Boot访问接口报500且Mongo连接异常如何解决?

问题根因

  1. 主机名不匹配:Docker Compose 内部网络通过服务名解析容器地址,你配置的Mongo连接地址主机为mongo,但docker-compose.yml中Mongo服务的名称是mongodb-container,无法正常解析。同时报错日志显示应用实际尝试连接localhost:27017,说明你激活的docker环境配置文件application-docker.properties中的Mongo地址大概率被错误配置为了localhost,覆盖了默认配置。
  2. 启动时序问题:depends_on仅控制容器启动顺序,不会等待MongoDB服务完全初始化完成就会启动Java应用,应用启动时Mongo未就绪也会触发连接报错。

修复方案

1. 统一Mongo连接地址与服务名

二选一即可:

  • 修改docker-compose.yml,将Mongo服务名改为mongo,匹配配置中的地址:
version: "3"
services:
  # 把原mongodb-container服务名改为mongo
  mongo:
    image: mongo:latest
    container_name: "mongodb-container"
    restart: always
    ports:
      - 27017:27017
  server-container:
    image: server_side
    container_name: "server-container"
    restart: always
    ports:
      - 8080:8080
    depends_on:
      - mongo
  • 或修改Spring配置文件的Mongo地址,匹配服务名:
    如果使用默认application.properties,修改为:
####### Mongo Properties ###########
spring.data.mongodb.uri=mongodb://mongodb-container/locationsdb

注意:如果你激活了docker配置文件,必须同步修改application-docker.properties中的Mongo连接地址,避免配置被覆盖。

2. 增加健康检测解决启动时序问题

修改docker-compose.yml,增加Mongo健康检测,确保Mongo服务完全就绪后再启动Java应用:

version: "3"
services:
  mongodb-container:
    image: mongo:latest
    container_name: "mongodb-container"
    restart: always
    ports:
      - 27017:27017
    # 新增健康检测配置
    healthcheck:
      test: echo 'db.runCommand("ping").ok' | mongosh localhost:27017/test --quiet
      interval: 5s
      timeout: 5s
      retries: 5
  server-container:
    image: server_side
    container_name: "server-container"
    restart: always
    ports:
      - 8080:8080
    depends_on:
      mongodb-container:
        # 等待Mongo健康检测通过再启动
        condition: service_healthy

3. 重新启动服务

执行以下命令清理旧容器并重启:

docker-compose down -v
docker-compose up --build

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:09:03