我有以下Dockerfile
FROM gradle:jdk13 AS appbuild
WORKDIR "/home/gradle/"
COPY --chown=gradle:gradle "./build.gradle" "/home/gradle/"
RUN gradle dependencies
COPY --chown=gradle:gradle "./src/" "/home/gradle/src/"
RUN gradle build --info
FROM openjdk:13
ENV LANG en_US.UTF-8
COPY --from=appbuild "/home/gradle/build/libs/frontend.jar" "/frontend.jar"
CMD ["java", "-jar", "-Dspring.profiles.active=default", "/frontend.jar"]
我的目标是防止每次我构建docker映像时gradle下载依赖项。
命令gradle dependencies
下载所有必需的Java库,以防它们丢失。
在执行第一个gradle dependencies
命令之前,我仅复制了build.gradle以便仅下载依赖项并对其进行缓存。
当我运行gradle build
命令时,为什么要再次下载所有文件?它们已经存在于其中一层中。
我尝试使用RUN gradle clean build --info || return 0
而不是gradle dependencies
,都是一样的。
答案 0 :(得分:1)
默认情况下未设置GRADLE_USER_HOME
环境变量。您需要显式设置它,然后在下一阶段复制下载的依赖项。
FROM gradle:jdk13 AS cache
WORKDIR /app
ENV GRADLE_USER_HOME /cache
COPY build.gradle gradle.properties settings.gradle ./
RUN gradle --no-daemon build --stacktrace
FROM gradle:jdk13 AS builder
WORKDIR /app
COPY --from=cache /cache /home/gradle/.gradle
COPY src/ src/
RUN gradle --no-daemon build --stacktrace
FROM openjdk:jre-alpine
WORKDIR /app
RUN apk --no-cache add curl
COPY --from=builder /app/build/libs/frontend.jar /frontend.jar
ENV PORT 80
EXPOSE 80
HEALTHCHECK --timeout=5s --start-period=5s --retries=1 \
CMD curl -f http://localhost:$PORT/health_check
CMD ["java", "-jar", "-Dspring.profiles.active=default", "/frontend.jar"]
这是我的original Dockerfile。我已经为您修改了它,但尚未对其进行测试,因此如果您有疑问,可以参考原始文件。