【问题标题】:How to make Gradle cache persistent through Docker containers?如何通过 Docker 容器使 Gradle 缓存持久化?
【发布时间】:2021-06-01 15:11:19
【问题描述】:

我有一个 Java(Gradle) 项目。使用 Dockerfile 在 CI 中构建 docker 镜像:

FROM gradle:6.8.3-jdk11
COPY --chown=gradle:gradle . /home/gradle/app
WORKDIR /home/gradle/app
RUN gradle compileTestJava

虽然gradle compileTestJava会下载所有的依赖,但是当容器从镜像运行时,gradle缓存是空的,所有的依赖都在重新下载。

如何将 gradle 缓存附加到图像上,以便在容器中使用?

【问题讨论】:

  • 你能出示你的Dockerfile吗?
  • @Max 已添加到帖子中

标签: java docker gradle dockerfile gradle-dependencies


【解决方案1】:

Gradle 将工件缓存在 USER_HOME/.gradle 文件夹中。 为此,您必须使用 Bind mountsVolumes 并将您的容器 $USER_HOME/.gradle 路径附加到该卷。

对于卷,

docker volume create <your_volume_name>

在运行容器时,像这样附加卷

docker run -v <your_volume_name>:USER_HOME/.gradle yourImage:tag

或者当您使用绑定挂载时,主机上的文件或目录被挂载到容器中。

docker run --mount type=bind,source=<your_host_path>,target=/USER_HOME/.gradle yourImage:tag

【讨论】:

    【解决方案2】:

    似乎.gradle 文件夹在gradle:6.8.3-jdk11 中设置为VOLUME,这会阻止缓存保存在图像中。

    解决方案是创建一个没有卷的自定义基本 gradle 映像。

    【讨论】:

      猜你喜欢
      • 2022-11-24
      • 2021-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多