1
我有一个简单的Gradle项目,我想在Docker容器内部构建在Docker中构建gradle项目
我有一个多阶段docker构建。第一阶段只是从github克隆项目。第二阶段必须建立该项目,以便我可以在最后阶段运行它。但它在
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)
......
为什么搬运工用户没有在工作目录中创建文件的权限以及如何添加这些权限? 简单RUN chmod 777 /app
不工作,并告诉我:chmod: /app: Operation not permitted
看一看的gradle为泊坞窗文件:4.2.1-jdk8高山https://github.com/ keeganwitt /泊坞窗,gradle产出/ BLOB/2d38bdd0ca754b0ee54ad29a483778fd84bfcbe4/jdk8高山/ Dockerfile。它设置USER“gradle”。您从app目录复制到docker image的app目录的文件可能没有“gradle”用户的权限。现在,RUN chmod不起作用,因为该命令在Docker上下文中再次作为“gradle”用户运行。因此,您必须在本地终端上运行“chown -R nobody:nobody/path/to/app/myProject”,然后构建泊坞窗图像。 – Cyclops
@Cyclops感谢您的评论。本地终端是什么意思?我不能在Dockerfile中自动执行它吗? –
您可以在您的dockerfile中添加以下3个命令: -------- 1. USER root#这会将默认用户更改为root 2. RUN chown -R gradle/app#这会更改文件夹的所有权 3 。用户gradle#这会将用户更改回默认用户“gradle” – Cyclops