我有一个Sping Boot 应用程序,我试图在开发期间设置重新加载。我使用Docker compose with volume mount将主机目录Map到应用程序容器中。
当我启用重新加载以便自动反映代码更改时,它会导致应用程序运行两次。
这是预期的行为吗?我是不是配置不正确,导致它在热重装期间像这样加倍?
Dockerfile
FROM maven:3.8.4-openjdk-17-slim AS build
WORKDIR /app
COPY pom.xml .
RUN mvn dependency:go-offline -B
COPY src ./src
RUN mvn package -DskipTests
FROM openjdk:17-jdk-slim AS runtime
COPY --from=build /app/target/book-course-1.0.0.jar .
CMD ["java", "-jar", "book-course-1.0.0.jar"]
WORKDIR /app
字符串
docker-compose.yml
version: "3.7"
services:
app:
build: .
env_file: ./.env
ports:
- $SPRING_PORT:$SPRING_PORT
depends_on:
- mysqldb
volumes:
- .:/app
restart: on-failure
command: sh -c "./mvnw spring-boot:run"
mysqldb:
image: mysql:8.0.22
型
1条答案
按热度按时间djmepvbi1#
我不太确定,但
dockerfile
是一个构建阶段文件。这意味着,它只会在构建图像时使用。一旦你有了一个构建的映像,任何改变都不能影响已经构建的映像。我想你正在寻找devtools设置,但同样,如果你使用CMD运行一个已经存在的JAR,Devtools不会有任何影响,因为图像是建立的。而CMD已经在运行旧JAR。
我认为(不是100%确定)您需要使用Gradle/Maven命令运行应用程序,例如,一旦文件更改,就会触发devtools。
您的卷应该看起来像这样:
字符串
将devtools添加到您的maven/gradle配置中,默认情况下,DevTools不会检测到类路径之外的文件的更改,其中包括我们作为卷装载的
/app
目录中的文件。要解决此问题,您可以将以下配置添加到application.properties
文件:型