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