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

SpringBoot容器通过Docker-Compose连接Mongo容器报503错误求助

排查容器间Spring Boot与MongoDB连接失败的问题

我来帮你定位这个问题,结合你给出的配置,核心问题出在容器间通信的端口配置,还有启动顺序的就绪校验上,咱们一步步来解决:

1. 修正MongoDB连接URI的端口配置

你在application.properties里写的是:

spring.data.mongodb.uri=mongodb://mongo:27018/tsp

这里犯了一个容器间通信的常见错误:容器之间访问用的是目标容器的内部端口,而不是宿主机的映射端口。

Mongo容器内部默认端口是27017,27018是你映射给宿主机的端口(方便你本地直接连Mongo)。容器间通过服务名mongo访问时,应该用内部端口,所以正确的配置是:

spring.data.mongodb.uri=mongodb://mongo:27017/tsp

2. 解决容器启动顺序的就绪问题

depends_on只是保证你的Spring Boot应用在Mongo容器之后启动,但不保证Mongo已经完全初始化好可以接受连接了——这很可能是你遇到503的另一个原因。

可以给Mongo服务加上健康检查,让Spring Boot应用等Mongo完全就绪后再启动:
修改你的docker-compose.yml,给mongo服务添加健康检查,同时更新app服务的depends_on条件:

version: '3'
services:
  app:
    container_name: VF-BACKEND
    restart: always
    build: .
    ports:
      - "8083:8080" #VF Webservice
    depends_on:
      mongo:
        condition: service_healthy
    # 移除links,Compose v3默认支持服务名发现,links已经过时
  mongo:
    container_name: VF-MONGO
    image: mongo:4.0.2
    ports:
      - "27018:27017"
    volumes:
      - /data/vfdb:/data/db
    healthcheck:
      test: ["CMD", "mongo", "--eval", "db.adminCommand('ping')"]
      interval: 10s # 每10秒检查一次
      timeout: 5s   # 超时时间5秒
      retries: 5    # 最多重试5次

3. 验证容器间网络连通性(可选)

如果修改后还是有问题,可以进入Spring Boot容器,手动测试和Mongo容器的连通性:

  • 进入容器:docker exec -it VF-BACKEND sh
  • 测试ping连通性:ping mongo(能ping通说明服务名解析正常)
  • 测试端口连通性:telnet mongo 27017(能连上说明端口没问题)

最后步骤

  1. 把application.properties里的Mongo端口改成27017
  2. 更新docker-compose.yml的健康检查配置
  3. 重新构建并启动容器:docker-compose down && docker-compose up --build

这样应该就能解决容器间的连接问题了,如果还有其他异常,可以把应用的日志贴出来,我再帮你分析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:28:37