Gradle docker 镜像:无法在 .gradle 目录中创建文件

问题描述 投票:0回答:1

我想使用 Gradle docker 镜像构建我的项目。由于我需要向其提供正确的存储库 URL 和凭据,因此我决定将它们输出到

~/.gradle/gradle.properties
,就像您通常在本地计算机上执行的操作一样。 但是我遇到了一个问题,无法在
~/gradle
中创建任何文件。

这是一个示例 Dockerfile:

FROM gradle:8.5-jdk21-alpine

RUN ls -la .
RUN echo hello > out
RUN ls -la .
WORKDIR .gradle
RUN ls -la .
RUN echo world > out
RUN ls -la .

给出以下输出:

Step 1/8 : FROM gradle:8.5-jdk21-alpine
 ---> 5d527d32c7be
Step 2/8 : RUN ls -la .
 ---> Running in 5195db2c8c4f
total 12
drwxr-srwx    1 gradle   gradle        4096 Jan 27 08:42 .
drwxr-xr-x    1 root     root          4096 Jan 27 08:42 ..
drwxr-srwx    2 gradle   gradle        4096 Jan 27 08:42 .gradle
 ---> Removed intermediate container 5195db2c8c4f
 ---> 18666307c9c5
Step 3/8 : RUN echo hello > out
 ---> Running in b7f9dfb48848
 ---> Removed intermediate container b7f9dfb48848
 ---> 0dded2505644
Step 4/8 : RUN ls -la .
 ---> Running in 7c7342768fd0
total 16
drwxr-srwx    1 gradle   gradle        4096 Feb  9 17:02 .
drwxr-xr-x    1 root     root          4096 Jan 27 08:42 ..
drwxr-srwx    2 gradle   gradle        4096 Jan 27 08:42 .gradle
-rw-r--r--    1 root     gradle           6 Feb  9 17:02 out
 ---> Removed intermediate container 7c7342768fd0
 ---> a50b7ebba4f3
Step 5/8 : WORKDIR .gradle
 ---> Running in d2fc92439198
 ---> Removed intermediate container d2fc92439198
 ---> 1537b03de558
Step 6/8 : RUN ls -la .
 ---> Running in 68e6257e2cc3
total 8
drwxr-srwx    2 gradle   gradle        4096 Jan 27 08:42 .
drwxr-srwx    1 gradle   gradle        4096 Feb  9 17:02 ..
 ---> Removed intermediate container 68e6257e2cc3
 ---> 9ac58a7ff572
Step 7/8 : RUN echo world > out
 ---> Running in 41543dabd95f
 ---> Removed intermediate container 41543dabd95f
 ---> ca7b08f161fc
Step 8/8 : RUN ls -la .
 ---> Running in 27d1c45d32b6
total 8
drwxr-srwx    2 gradle   gradle        4096 Jan 27 08:42 .
drwxr-srwx    1 gradle   gradle        4096 Feb  9 17:02 ..
 ---> Removed intermediate container 27d1c45d32b6
 ---> a7ef272b3325

为什么会出现这种情况?该文件夹是否有某种特殊处理?为什么没有出现错误?有没有更惯用的方法将存储库凭据提供给 gradle 容器?

docker gradle dockerfile
1个回答
0
投票

我不确定这是否是将这些信息输入到 Docker 镜像中的最佳方式,但我相信这里有一些东西可以满足您的需求。

🗎

Dockerfile

FROM gradle:8.5-jdk21-alpine

COPY gradle.properties .gradle/gradle.properties
# These commands are just to validate that the file is there.
RUN ls .gradle
RUN cat .gradle/gradle.properties

假设您的本地目录中有一个

gradle.properties
文件,然后将其复制到图像上的
.gradle/
中。

与您的图像共享此信息的其他选项是:

  • 只需使用项目级
    gradle.properties
    文件;
  • 使用卷挂载与正在运行的容器共享来自主机的
    gradle.properties
    文件;或
  • 将这些设置作为环境变量传递。

为了便于说明,我创建了一个包含以下内容的

gradle.properties

org.gradle.daemon=true
org.gradle.parallel=true
org.gradle.configureondemand=true

在步骤3/4中您可以看到该文件确实位于

.gradle
文件夹中,并且在步骤4/4中您可以看到图像上的文件内容是正确的。

© www.soinside.com 2019 - 2024. All rights reserved.