【发布时间】:2020-08-07 17:04:41
【问题描述】:
我一直在阅读各种答案,以从部署在 Docker 容器中的 Spring Boot 应用程序连接我的本地 MongoDB。 但我得到以下错误:
2020-04-24 06:39:29.425 INFO 1 --- [ main] org.mongodb.driver.cluster : Adding discovered server 127.0.0.1:27017 to client view of cluster
2020-04-24 06:39:29.542 INFO 1 --- [127.0.0.1:27017] org.mongodb.driver.cluster : Exception in monitor thread while connecting to server 127.0.0.1:27017
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.lang.Thread.run(Thread.java:748) [na:1.8.0_252]
Caused by: java.net.ConnectException: Connection refused (Connection refused)
at java.net.PlainSocketImpl.socketConnect(Native Method) ~[na:1.8.0_252]
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) ~[na:1.8.0_252]
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) ~[na:1.8.0_252]
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) ~[na:1.8.0_252]
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[na:1.8.0_252]
at java.net.Socket.connect(Socket.java:607) ~[na:1.8.0_252]
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]
... 3 common frames omitted
2020-04-24 06:39:30.833 INFO 1 --- [ main] pertySourcedRequestMappingHandlerMapping : Mapped URL path [/v2/api-docs] onto method [public org.springframework.http.ResponseEntity<springfox.documentation.spring.web.json.Json> springfox.documentation.swagger2.web.Swagger2Controller.getDocumentation(java.lang.String,javax.servlet.http.HttpServletRequest)]
如果我从 docker 容器中运行这个 Spring Boot 应用程序,它可以正常工作。 但是从 docker 容器内部,它无法访问 docker 容器外部的我的 mongoDB。 这就是我运行 docker 容器的方式:
docker build -f .\Dockerfile -t dockerspringboot .
docker run -p 8085:8080 dockerspringboot
这是我的 Dockerfile:
FROM openjdk:8
ADD build/libs/SpringBoot-1.0.jar SpringBoot-1.0.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "SpringBoot-1.0.jar"]
-我尝试将ipaddress更改为0.0.0.0和127.0.0.1,但没有用。
-我尝试使用以下注释/未注释选项更改 mondod.conf:
# network interfaces
net:
#port: 27017
bindIp: 0.0.0.0
# bindIpAll: true
# bindIp: 127.0.0.1
-我尝试更改防火墙设置以允许所有程序也访问 docker 后端进程。
还尝试使用 ipconfig 命令更改本地 IP 地址,但仍然没有成功。
【问题讨论】:
-
你的mongodb连接参数是什么?
-
这些是spring boot app中mongodb连接的详细信息: server.port=8080 spring.data.mongodb.host=127.0.0.1 spring.data.mongodb.port=27017 sspring.data.mongodb .database=app1 代替主机,我尝试更改所有不同的 IP 地址。
-
请发布完整的 docker-compose 文件
-
我没有 docker compose 文件,我只有 Dockerfile,我正在尝试使用 "docker run -p 8085:8080 dockerspringboot" 运行。我需要使用 docker-compose 文件尝试吗?
-
尝试以这种方式连接到您的 MongoDB:
host.docker.internal:27017connecting to local mongodb from docker container
标签: mongodb spring-boot docker dockerfile