【问题标题】:Not able to acsess existing MongoDb from Spring Boot App Deploy in Docker Container无法从 Docker 容器中的 Spring Boot App Deploy 访问现有的 MongoDb
【发布时间】: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


【解决方案1】:

--network="host" 添加到您的 docker run 命令中。然后你的 docker 容器就可以访问localhost:27017

【讨论】:

    【解决方案2】:

    您应该指定访问数据库的权限(如果存在),试试这个:

    spring.data.mongodb.authentication-database=admin
    spring.data.mongodb.database=app1
    spring.data.mongodb.host=host.docker.internal
    spring.data.mongodb.port=27017
    spring.data.mongodb.password=PASSWORD
    spring.data.mongodb.username=USERNAME
    

    【讨论】:

    • 嘿s.sofiane,我没有向数据库添加授权,但我尝试将 spring.data.mongodb.host=127.0.0.1 更改为 spring.data.mongodb.host=host.docker .internal 正如你所建议的那样,它现在正在工作。谢谢你!!
    猜你喜欢
    • 1970-01-01
    • 2019-02-21
    • 2019-10-05
    • 2021-04-04
    • 1970-01-01
    • 2019-11-14
    • 2019-06-10
    • 2019-06-21
    相关资源
    最近更新 更多