为了账号安全,请及时绑定邮箱和手机立即绑定

在 Docker 中连接 Spring Boot 和 MongoDB

在 Docker 中连接 Spring Boot 和 MongoDB

慕盖茨4494581 2023-10-19 21:30:56
我正在尝试在 docker-compose.yml 中连接 MongoDb 和 Spring Boot。就是这个 -version: "3.7"services:  app-server:    container_name: spring    build: .    ports:      - "8080:8080"    restart: always    depends_on:      - db  db:    container_name: mongo    image: mongo    ports:      - "27017:27017"    restart: always    volumes:      - ./datadir:/var/lib/mongo我的 Spring DockerfileFROM openjdk:8-jdk-alpineVOLUME /tmpARG JAR_FILECOPY ${JAR_FILE} app.jarENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]用于构建 JAR_FILE 的 POM.xml 插件 -            <plugin>                <groupId>com.spotify</groupId>                <artifactId>dockerfile-maven-plugin</artifactId>                <version>1.3.6</version>                <executions>                    <execution>                        <id>build-image</id>                        <phase>package</phase>                        <goals>                            <goal>build</goal>                        </goals>                    </execution>                </executions>                <configuration>                    <repository>maximko/${project.artifactId}</repository>                    <buildArgs>                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>                    </buildArgs>                </configuration>            </plugin>application.properties 文件spring.data.mongodb.host=dbspring.data.mongodb.port=27017spring.data.mongodb.database=HotelDB我的问题1)所有这些问题是否都来自“application.properties”文件,或者我在 docker-compose 文件中错误配置了某些内容?2)我可以以某种方式更改我的mongoDB的主机名吗?3)在运行“docker-compose.yml”之前,我是否需要运行“mvn package”来构建我的App.jar文件?谢谢您的帮助!
查看完整描述

2 回答

?
慕标5832272

TA贡献1966条经验 获得超4个赞

终于...我解决了我的问题。这是我的改变:


1)我从pom.xml中删除了这个插件


        <plugin>

            <groupId>com.spotify</groupId>

            <artifactId>dockerfile-maven-plugin</artifactId>

            <version>1.3.6</version>

            <executions>

                <execution>

                    <id>build-image</id>

                    <phase>package</phase>

                    <goals>

                        <goal>build</goal>

                    </goals>

                </execution>

            </executions>

            <configuration>

                <repository>maximko/${project.artifactId}</repository>

                <buildArgs>

                    <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>

                </buildArgs>

            </configuration>

        </plugin>

并在 Dockerfile 中替换此代码。在 ENTRYPOINT 中,我将 mongodb 连接 uri 添加到我的数据库服务(这是主要更改!)


FROM openjdk:8-jdk-alpine

VOLUME /tmp

COPY target/spring-mongo-demo-0.0.1-SNAPSHOT.jar app.jar

RUN sh -c "touch /app.jar"

ENTRYPOINT ["java","-Dspring.data.mongodb.uri=mongodb://db:27017/HotelDB","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

为了构建我的 app.jar 我使用了mavem package,但是如果没有生成你的 jar 文件,你应该使用mavem install


另外,在 application.properties 文件中,我指示spring.data.mongodb.host=db并捕获以下错误


Caused by: java.net.UnknownHostException: db

为了避免在构建 JAR 文件时出现此异常,我改为编写spring.data.mongodb.host=localhost


查看完整回答
反对 回复 2023-10-19
?
慕少森

TA贡献2019条经验 获得超9个赞

在 docker compose 文件中 -对 docker 容器使用旧版容器链接或用户定义的桥接网络。



查看完整回答
反对 回复 2023-10-19
  • 2 回答
  • 0 关注
  • 110 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信