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
网络排查(如果上述方法无效)
- 查看项目对应的Docker网络:
docker network ls
找到名称为[你的项目目录名]_app-network的网络。
- 检查两个容器是否在同一网络:
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
相关产品推荐
相关产品推荐

