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

Spring容器连接Mongo容器失败:UnknownHostException问题求助

解决Spring容器无法解析Mongo服务名db的问题

优先排查:jar包内的配置是否正确

报错UnknownHostException: db最常见的原因是打包后的jar里的配置没更新。如果本地开发时用的是localhost,构建jar时忘记改成db,容器里的Spring应用会一直尝试连接自身的localhost,自然找不到Mongo服务。

验证配置:

unzip -p ./build/libs/foo.jar BOOT-INF/classes/application.properties

如果输出是mongodb://localhost:27017/app,修改本地的application.properties后重新构建jar即可。

优化Docker Compose配置(解决网络与启动顺序问题)

你的配置里links在Docker Compose 3版本已经被废弃,默认情况下同一项目的服务会自动加入同一网络,服务名可直接解析。同时加上健康检查,确保Mongo完全就绪后再启动Spring:

version: '3.8'
services:
  app:
    build: .
    ports:
      - "8080:8080"
    depends_on:
      db:
        condition: service_healthy
    networks:
      - app-network
      
  db:
    image: mongo
    volumes:
      - ./database:/data/db  # 注意:Mongo默认数据目录是/data/db,原配置的/data会覆盖默认结构,可能导致异常
    ports:
      - "27017:27017"
    healthcheck:
      test: ["CMD", "mongosh", "--eval", "db.adminCommand('ping')"]
      interval: 5s
      timeout: 5s
      retries: 5
    networks:
      - app-network

networks:
  app-network:
    driver: bridge

网络排查(如果上述方法无效)

  1. 查看项目对应的Docker网络:
docker network ls

找到名称为[你的项目目录名]_app-network的网络。

  1. 检查两个容器是否在同一网络:
docker inspect [网络名称] | grep -E "Name|Containers"

如果app和db容器都在列表里,说明网络正常;否则执行docker compose down && docker compose up --build重建网络。

为什么改localhost也不行?

容器的localhost指向容器自身,Spring容器用localhost连接时,会尝试访问自己的27017端口,而非Mongo容器,所以必然失败,必须用服务名db。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 22:35:21