Springboot mongo异常与Docker
Posted
技术标签:
【中文标题】Springboot mongo异常与Docker【英文标题】:Springboot mongo exception with Docker 【发布时间】:2020-09-17 15:37:58 【问题描述】:我是 docker 新手,正在尝试将 spring boot 应用程序与 mongo db 连接,mongo db 在端口 27017 的 docker 上运行。在我的 pom 中,我有这个:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
我没有在 application.properties 中指定任何内容。以下是spring boot失败的日志:
com.mongodb.MongoSocketOpenException: Exception opening socket
at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:67) ~[mongodb-driver-core-3.8.2.jar:na]
at com.mongodb.internal.connection.InternalStreamConnection.open(InternalStreamConnection.java:126) ~[mongodb-driver-core-3.8.2.jar:na]
at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:117) ~[mongodb-driver-core-3.8.2.jar:na]
at java.base/java.lang.Thread.run(Thread.java:830) ~[na:na]
Caused by: java.net.ConnectException: Connection refused: no further information
at java.base/sun.nio.ch.Net.pollConnect(Native Method) ~[na:na]
at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:579) ~[na:na]
at java.base/sun.nio.ch.NiosocketImpl.timedFinishConnect(NioSocketImpl.java:549) ~[na:na]
at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597) ~[na:na]
at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:339) ~[na:na]
at java.base/java.net.Socket.connect(Socket.java:603) ~[na:na]
at com.mongodb.internal.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:64) ~[mongodb-driver-core-3.8.2.jar:na]
at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:62) ~[mongodb-driver-core-3.8.2.jar:na]
以及来自 mongodb(docker) 的日志
2020-05-30T00:31:55.387+0000 I NETWORK [listener] Listening on /tmp/mongodb-27017.sock
2020-05-30T00:31:55.388+0000 I NETWORK [listener] Listening on 0.0.0.0
2020-05-30T00:31:55.391+0000 I NETWORK [listener] waiting for connections on port 27017
2020-05-30T00:31:55.405+0000 I INDEX [LogicalSessionCacheRefresh] index build: done building index _id_ on ns config.system.sessions
2020-05-30T00:31:55.425+0000 I INDEX [LogicalSessionCacheRefresh] index build: starting on config.system.sessions properties: v: 2, key: lastUse: 1 , name: "lsidTTLIndex", ns: "config.system.sessions", expireAfterSeconds: 1800 using method: Hybrid
2020-05-30T00:31:55.426+0000 I INDEX [LogicalSessionCacheRefresh] build may temporarily use up to 200 megabytes of RAM
2020-05-30T00:31:55.426+0000 I INDEX [LogicalSessionCacheRefresh] index build: collection scan done. scanned 0 total records in 0 seconds
2020-05-30T00:31:55.429+0000 I INDEX [LogicalSessionCacheRefresh] index build: inserted 0 keys from external sorter into index in 0 seconds
2020-05-30T00:31:55.431+0000 I INDEX [LogicalSessionCacheRefresh] index build: done building index lsidTTLIndex on ns config.system.sessions
2020-05-30T00:31:55.434+0000 I SHARDING [LogicalSessionCacheReap] Marking collection config.transactions as collection version: <unsharded>
2020-05-30T00:31:56.006+0000 I SHARDING [ftdc] Marking collection local.oplog.rs as collection version: <unsharded>
有人可以帮帮我吗?
谢谢!
【问题讨论】:
你是如何运行 docker 容器的,你能指定命令吗?典型的错误是您没有按应有的方式管理网络,例如,您可能尝试连接到容器内的 localhost,认为您正在连接到 localhost 作为您的机器而不是容器。 你能检查一下上面提到的答案,看看它是否解决了问题,是否可以被接受为答案? @nischay goyal 我能够通过升级 Windows 2004 版本然后安装 Docker Desktop for Windows 来解决这个问题(在卸载旧版 Docker Toolbox 之后,这是以前的 Windows 版本所必需的)。不再收到错误消息。 其实很好。我应该添加这个来回答,你能关闭它吗? 好的,继续。 【参考方案1】:我能够通过升级 Windows 2004 版本然后安装适用于 Windows 的 Docker Desktop 来解决此问题(在卸载旧版 Docker Toolbox 之后,这是以前的 Windows 版本所必需的)。
【讨论】:
【参考方案2】:上述问题的解决方法:-
通过获取 Windows 2004 版本升级,然后安装 Docker Desktop for Windows(在卸载旧版 Docker Toolbox 之后,这是以前的 Windows 版本所必需的)。
我建议您通过docker-compose
运行您的容器,并查看下面的docker-compose.yml
以供参考。
version: "3"
services:
api-database:
image: mongo:3.2.4
container_name: "api-database"
ports:
- 27017:27017
command: --smallfiles
api:
image: XXXX
ports:
- XXXX:XXXX
links:
- api-database
使用 docker-compose 中定义的服务名称使用 spring config 属性配置 mongodb 主机名。
spring.data.mongodb.host=api-database
然后运行
docker-compose up
参考:-https://nirajsonawane.github.io/2019/12/16/Spring-Boot-Mongodb-Docker-Compose/
【讨论】:
以上是关于Springboot mongo异常与Docker的主要内容,如果未能解决你的问题,请参考以下文章
Springboot 容器使用 docker-compose 连接到 mongo 容器的 503 错误代码
Docker中的Spring Boot未连接到Docker中的Mongo
尝试将docker容器连接到mongodb时出现异常打开套接字异常