Spring Boot应用连接Docker中MongoDB容器失败求助
Spring Boot容器无法连接Docker中的MongoDB
问题背景
我开发了一个简单的Spring Boot应用,需要连接部署在Docker容器内的MongoDB,但尝试多种配置组合后均无法成功连接,以下是我的配置细节及报错情况:
application.properties 配置尝试
第一种配置:
spring.data.mongodb.host=docker-mongo-service # 我已尝试0.0.0.0、127.0.0.1和localhost,能生成JAR文件但容器运行时连接MongoDB失败 spring.data.mongodb.port=27017 spring.data.mongodb.database=users server.port=8080
第二种配置:
spring.data.mongodb.host=localhost spring.data.mongodb.port=27018 spring.data.mongodb.database=users server.port=8080
该配置在IntelliJ IDEA或Postman中运行应用时可正常连接数据库,但在Docker中运行时连接失败。
localhost:27018 对应的报错信息
INFO 1 --- [localhost:27018] org.mongodb.driver.cluster : Exception in monitor thread while connecting to server localhost:27018 2023-03-07T10:49:19.475466464Z 2023-03-07T10:49:19.475472102Z com.mongodb.MongoSocketOpenException: Exception opening socket 2023-03-07T10:49:19.475476001Z at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:73) ~[mongodb-driver-core-4.8.2.jar!/:na] 2023-03-07T10:49:19.475480478Z at com.mongodb.internal.connection.InternalStreamConnection.open(InternalStreamConnection.java:183) ~[mongodb-driver-core-4.8.2.jar!/:na] 2023-03-07T10:49:19.475484289Z at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.lookupServerDescription(DefaultServerMonitor.java:198) ~[mongodb-driver-core-4.8.2.jar!/:na] 2023-03-07T10:49:19.475488368Z at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:158) ~[mongodb-driver-core-4.8.2.jar!/:na] 2023-03-07T10:49:19.475500487Z at java.base/java.lang.Thread.run(Thread.java:833) ~[na:na] 2023-03-07T10:49:19.475504485Z Caused by: java.net.ConnectException: Connection refused 2023-03-07T10:49:19.475508415Z at java.base/sun.nio.ch.Net.pollConnect(Native Method) ~[na:na] 2023-03-07T10:49:19.475512151Z at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) ~[na:na] 2023-03-07T10:49:19.475515746Z at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:539) ~[na:na] 2023-03-07T10:49:19.475519708Z at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:594) ~[na:na] 2023-03-07T10:49:19.475523952Z at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) ~[na:na] 2023-03-07T10:49:19.475528048Z at java.base/java.net.Socket.connect(Socket.java:633) ~[na:na] 2023-03-07T10:49:19.475531926Z at com.mongodb.internal.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:107) ~[mongodb-driver-core-4.8.2.jar!/:na] 2023-03-07T10:49:19.475535871Z at com.mongodb.internal.connection.SocketStream.initializeSocket(SocketStream.java:82) ~[mongodb-driver-core-4.8.2.jar!/:na] 2023-03-07T10:49:19.475539944Z at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:68) ~[mongodb-driver-core-4.8.2.jar!/:na] 2023-03-07T10:49:19.475544141Z ... 4 common frames omitted
MongoDB容器配置
因本地27017端口已运行MongoDB,故将容器的27017端口映射到localhost:27018:
Port 27017 0.0.0.0:27018
Dockerfile
FROM openjdk:latest COPY target/*.jar app.jar EXPOSE 8080 ENTRYPOINT ["java", "-jar", "app.jar"]
docker-mongo-service:27017 对应的报错信息
INFO 4920 --- [o-service:27017] org.mongodb.driver.cluster : Exception in monitor thread while connecting to server docker-mongo-service:27017 com.mongodb.MongoSocketException: docker-mongo-service at com.mongodb.ServerAddress.getSocketAddresses(ServerAddress.java:217) ~[mongodb-driver-core-4.8.2.jar:na] at com.mongodb.internal.connection.SocketStream.initializeSocket(SocketStream.java:78) ~[mongodb-driver-core-4.8.2.jar:na] at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:68) ~[mongodb-driver-core-4.8.2.jar:na] at com.mongodb.internal.connection.InternalStreamConnection.open(InternalStreamConnection.java:183) ~[mongodb-driver-core-4.8.2.jar:na] at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.lookupServerDescription(DefaultServerMonitor.java:198) ~[mongodb-driver-core-4.8.2.jar:na] at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:158) ~[mongodb-driver-core-4.8.2.jar:na] at java.base/java.lang.Thread.run(Thread.java:833) ~[na:na] Caused by: java.net.UnknownHostException: docker-mongo-service at java.base/java.net.InetAddress$CachedAddresses.get(InetAddress.java:801) ~[na:na] at java.base/java.net.InetAddress$NameServiceAddresses.get(InetAddress.java:887) ~[na:na] at java.base/java.net.InetAddress.getAllByName0(InetAddress.java:1509) ~[na:na] at java.base/java.net.InetAddress.getAllByName(InetAddress.java:1367) ~[na:na] at java.base/java.net.InetAddress.getAllByName(InetAddress.java:1301) ~[na:na] at com.mongodb.ServerAddress.getSocketAddresses(ServerAddress.java:209) ~[mongodb-driver-core-4.8.2.jar:na] ... 6 common frames omitted
已尝试的主机地址
- 127.0.0.1
- 0.0.0.0
- localhost
- docker-mongo-service(MongoDB容器名称)
注:无法使用Docker-Compose。
内容的提问来源于stack exchange,提问作者MakeBugsNotWar
相关产品推荐
相关产品推荐

