在Docker中构buildgradle项目

我有一个简单的Gradle项目,我想在Docker容器中构build

我有一个多阶段dockerbuild设。 第一阶段只是从github克隆项目。 第二阶段必须build立项目,以便在最后阶段运行。 但它没有进入

FROM gradle:4.2.1-jdk8-alpine WORKDIR /app COPY --from=0 /app/myProject /app RUN ./gradlew build --stacktrace 

命令./gradlew build --stacktrace无法执行并失败,并显示以下错误:

 FAILURE: Build failed with an exception. * What went wrong: Could not update /app/.gradle/3.5-rc-2/file-changes/last-build.bin 

和堆栈跟踪:

 org.gradle.api.UncheckedIOException: Could not update /app/.gradle/3.5-rc-2/file-changes/last-build.bin at org.gradle.api.internal.changedetection.state.FileTimeStampInspector.updateOnFinishBuild(FileTimeStampInspector.java:72) at org.gradle.api.internal.changedetection.state.BuildScopeFileTimeStampInspector.stop(BuildScopeFileTimeStampInspector.java:38) at org.gradle.internal.concurrent.CompositeStoppable.stop(CompositeStoppable.java:98) ..... Caused by: java.io.FileNotFoundException: /app/.gradle/3.5-rc-2/file-changes/last-build.bin (Permission denied) at java.io.FileOutputStream.open0(Native Method) ...... 

为什么docker用户没有权限在工作目录中创build文件以及如何添加这些权限? 简单RUN chmod 777 /app不起作用,并告诉我: chmod: /app: Operation not permitted

根据Gradle的Dockerfile:4.2.1-jdk8-alpine at,它的默认用户是“ gradle ”。 您从应用程序目录复制到泊坞窗图像的应用程序目录的文件可能没有“gradle”用户的权限。

您应该在Dockerfile中添加三个额外的命令来设置正确的权限:

 FROM gradle:4.2.1-jdk8-alpine WORKDIR /app COPY --from=0 /app/myProject /app USER root # This changes default user to root RUN chown -R gradle /app # This changes ownership of folder USER gradle # This changes the user back to the default user "gradle" RUN ./gradlew build --stacktrace