我想使用 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 镜像中的最佳方式,但我相信这里有一些东西可以满足您的需求。
🗎
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中您可以看到图像上的文件内容是正确的。