当前位置: 首页 > 知识库问答 >
问题:

MongoDB SpringBoot REST API Docker组成不工作

伍成仁
2023-03-14

我试图使用docker compose来运行我的Springboot REST API,它使用Mongo作为数据库,但我收到了以下错误。有人能帮我解决这个问题吗?

当我的Spring启动应用程序试图通过Docker容器连接到MongoDB时,它会给我带来问题。Spring Boot似乎无法连接到端口27017上的MongoDB。

下面是部分代码和异常。

DockerFile

FROM adoptopenjdk/openjdk11:alpine-jre
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]

Docker-Compose.yml


version: '3.8'

services:

      sprintpoker-springboot-container:
            image: sprintpoker-springboot
            build:
                  context: ./
                  dockerfile: Dockerfile
            volumes:
                  - /data/sprintpoker-springboot-container
            ports:
                  - 8080:8080
            depends_on:
                  - mongo

      mongo:
            image: mongo
            container_name: mongodb
            ports:
                  - 27017:27017
            volumes:
                  - data:/data
            environment:
                  MONGO_INITDB_ROOT_USERNAME: rootuser
                  MONGO_INITDB_ROOT_PASSWORD: rootpass

      mongo-express:
            image: mongo-express
            restart: always
            ports:
                  - 8081:8081
            environment:
                  ME_CONFIG_MONGODB_ADMINUSERNAME: rootuser
                  ME_CONFIG_MONGODB_ADMINPASSWORD: rootpass
                  ME_CONFIG_MONGODB_SERVER: mongo
volumes:
      data: {}
networks:
      default:
            name: mongodb_network

我用于运行docker的命令:

docker-compose up -d --build --force-recreate --renew-anon-volumes

spring boot docker容器上出现异常:

2021-08-16 03:16:02.453 INFO 1 --- [ main] org.mongodb.driver.cluster : Cluster created with settings {hosts=[localhost:27017], mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms'}

2021-08-16 03:16:02.545 INFO 1 --- [localhost:27017] org.mongodb.driver.cluster : Exception in monitor thread while connecting to server localhost:27017


com.mongodb.MongoSocketOpenException: Exception opening socket

at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:70) ~[mongodb-driver-core-4.2.3.jar!/:na]

at com.mongodb.internal.connection.InternalStreamConnection.open(InternalStreamConnection.java:143) ~[mongodb-driver-core-4.2.3.jar!/:na]

at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.lookupServerDescription(DefaultServerMonitor.java:188) ~[mongodb-driver-core-4.2.3.jar!/:na]

at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:144) ~[mongodb-driver-core-4.2.3.jar!/:na]

at java.base/java.lang.Thread.run(Unknown Source) ~[na:na]

Caused by: java.net.ConnectException: Connection refused (Connection refused)

at java.base/java.net.PlainSocketImpl.socketConnect(Native Method) ~[na:na]

at java.base/java.net.AbstractPlainSocketImpl.doConnect(Unknown Source) ~[na:na]

at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source) ~[na:na]

at java.base/java.net.AbstractPlainSocketImpl.connect(Unknown Source) ~[na:na]

at java.base/java.net.SocksSocketImpl.connect(Unknown Source) ~[na:na]

at java.base/java.net.Socket.connect(Unknown Source) ~[na:na]

at com.mongodb.internal.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:107) ~[mongodb-driver-core-4.2.3.jar!/:na]

at com.mongodb.internal.connection.SocketStream.initializeSocket(SocketStream.java:79) ~[mongodb-driver-core-4.2.3.jar!/:na]

at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:65) ~[mongodb-driver-core-4.2.3.jar!/:na]

... 4 common frames omitted

应用性质

spring.data.mongodb.authentication-database=admin
spring.data.mongodb.username=rootuser
spring.data.mongodb.password=rootpass
spring.data.mongodb.database=sprint
spring.data.mongodb.port=27017
spring.data.mongodb.host=localhost
spring.data.mongodb.auto-index-creation=true

谢谢!

共有3个答案

张毅
2023-03-14
  1. 应用程序。yaml/properties文件
spring:
        data:
          mongodb:
            database: test
            host: mymongodb
            port: 27017
        spring.data.mongodb.port=27017
        spring.data.mongodb.host=<mongo-image-name>
        spring.data.mongodb.database=<any-database-name>

docker pull mongo:最新版本

停止本地Mongo服务,因为它在同一端口上运行

运行docker镜像:-

docker run-d-p 27017:27017--name mymongodb mongo:latest--mymongodb是容器名,将是yaml或属性文件中的主机名

FROM openjdk:11
      ADD target/springboot-mongo-docker.jar app.jar
      EXPOSE 8080
      ENTRYPOINT ["java","-jar","app.jar"]

构建jar:-mvn干净安装

构建Docker镜像:-Docker构建-t springboot mongodb:1.0。

按如下方式运行链接的容器:-

docker运行-p 8080:8080--name springboo-mongodb--link mymongodb: mongo-d springboo-mongodb: 1.0

码头工人整理

> version: "3"      
     services:       mymongodb:
>          image: mongo:latest
>          container_name: "mymongodb"
>          ports:
>            - 27017:27017       springboot-mongodb:
>          image: springboot-mongodb:1.0
>          container_name: springboot-mongodb
>          ports:
>            - 8080:8080
>          links:
>            - mymongodb
申浩广
2023-03-14

多亏了@OneCricketeer和@MichałKrzywański(springboot中docker的Mongodb连接错误),我才能够解决这个问题。

解决方案:在docker compose文件中添加以下行:

environment:
      - SPRING_DATA_MONGODB_.HOST=mongo

 expose:
                  - 27017

贲永思
2023-03-14

你的错误就在这里

2021-08-16 03:16:02.545信息1---[localhost:27017]组织。mongodb。驾驶员群集:连接到服务器localhost:27017时监视器线程中出现异常

Spring应用程序容器在端口27017上没有运行任何东西,更不用说MongoDB服务器了。

改变

spring.data.mongodb.host=localhost

spring.data.mongodb.host=mongo

 类似资料:
  • 我试图使用Spring/AspectJ集成,但运气不好。Spring版本是3.2.17(是的,我知道有点旧)。 以下是我的相关配置: pom.xml: 应用程序上下文。xml: spect.java(相关类): 我倒了很多在线教程,运气不好。有人能指出我做错了什么吗? 杰森

  • 我们希望使用logstash获取日志并将其传递给Kafka。 我们已经为logstash1.5.0beta1和kafka 2.9.2_0.8.1.1编写了以下conf文件 ** ** 运行以下命令后:bin/logstash代理-ftest.conf--logex.log test.conf是我们的conf文件。ex.log是我们为要存储的日志创建的空白文件。 我们得到以下输出 发送logstas

  • 基于文档https://netty . io/4.1/API/io/netty/channel/channel pipeline . html:< br > //告诉管道在与I/O线程不同的线程中运行MyBusinessLogicHandler的事件处理程序方法 //,这样I/O线程就不会被 //阻塞,这是一项耗时的任务。 //如果您的业务逻辑是完全异步的或很快就完成了,您不需要指定一个组。 pi

  • 我对camel-jpa组件中的“maxMessagesPerPoll”的理解是,当我设置“maxMessagesPerPoll=4”时,每个投票将获取4条记录。但不是每个投票相同的4条记录。我应该得到下4套记录。 但是当我把参数设置为4时,我总是得到相同的前4条记录。如何获得每次投票的下一组后续记录。 这背后的想法——我想分批处理REORD,而不是同时处理所有数据。 只是想有可滚动的-有点。 如何

  • 我正在尝试使用将XML转换为对象,我的XML如下所示: 所以我创建了3个java类:EntityResource.java,Item.java和PromissionRecipient.java如下图所示: EntityResource.java Item.java PermissionRecipient.java 所有工作和我得到了一个EntityResources对象包含项目,但EntityRe

  • 当执行上面的代码时,将发生回滚,并且“Hibernate操作”将被回滚,但在TaskService.Complete中执行的操作不会被回滚。 我已经调试了Camunda代码,一切似乎都正常,我找到了一个SpringTransactionInterceptor,命令在中执行,此时事务处于活动状态。