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

SpringBoot应用连接Docker化MongoDB遇域名解析失败问题求助

问题分析:SpringBoot连接Docker MongoDB失败报错MongoSocketException

问题描述

在Ubuntu 20.04系统上运行简单SpringBoot应用,相关配置如下:

pom.xml核心依赖

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.7.4</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

....

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

application.properties配置

spring.data.mongodb.uri=mongodb://my_db:27017/test

文档与仓库定义

@Repository
interface SomeDocumentRepository : CrudRepository<SomeDocument, String>

@Document
data class SomeDocument(
    @Id val id: String? = null,
    val name: String
)

通过以下命令启动MongoDB容器:

docker run -d -p 27017:27017 --name my_db mongo:latest

启动SpringBoot应用时崩溃,报错:

com.mongodb.MongoSocketException: my_db: Temporary failure in name resolution

原因分析

核心问题是主机名解析失败:

  • Docker容器的名称my_db是Docker内部网络的专属主机名,只有处于同一个Docker网络中的容器才能通过这个名称互相访问。
  • 你的SpringBoot应用是直接在Ubuntu宿主机上运行的,不属于Docker容器网络,宿主机的DNS系统无法识别my_db这个名称,自然连不上MongoDB。

解决方案

有两种实用的解决方式:

方式1:改用宿主机localhost连接(快速解决)

因为你已经通过-p 27017:27017把MongoDB的端口映射到了宿主机,直接用localhost替换配置里的my_db即可:
修改application.properties:

spring.data.mongodb.uri=mongodb://localhost:27017/test

方式2:统一Docker网络(适合容器化部署场景)

如果后续打算把SpringBoot也容器化,推荐用自定义Docker网络来实现服务间通信:

  1. 创建自定义Docker网络:
docker network create my-app-network
  1. 启动MongoDB容器时加入该网络:
docker run -d -p 27017:27017 --name my_db --network my-app-network mongo:latest
  1. 把SpringBoot应用打包成Docker镜像后,启动时加入同一个网络:
docker run -d --name my-spring-app --network my-app-network your-spring-boot-image:tag

此时application.properties里的my_db可以正常解析,无需修改配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 12:55:14