Ser*_*hyr 4 file-permissions gradle docker build.gradle
我有一个简单的gradle项目,我想在Docker容器中构建
我有一个多级docker构建.第一阶段只是从github克隆项目.第二阶段必须建立项目,以便我可以在最后阶段运行它.但它失败了
FROM gradle:4.2.1-jdk8-alpine
WORKDIR /app
COPY --from=0 /app/myProject /app
RUN ./gradlew build --stacktrace
Run Code Online (Sandbox Code Playgroud)
该命令./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
Run Code Online (Sandbox Code Playgroud)
和堆栈跟踪:
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 Code Online (Sandbox Code Playgroud)
为什么docker用户没有权限在工作目录中创建文件以及如何添加这些权限?简单RUN chmod 777 /app不起作用告诉我:chmod: /app: Operation not permitted
Rag*_*ngh 11
根据用于gradle的Dockerfile:4.2.1-jdk8-alpine at,它有" gradle "作为默认用户.您从app目录复制到docker image的app目录的文件可能没有"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
Run Code Online (Sandbox Code Playgroud)
另一种选择是使用ADD命令代替,COPY然后使用它的--chown选项在复制后更改文件的所有者。因此,最终的Dockerfile会更加简单。
FROM gradle:4.2.1-jdk8-alpine
WORKDIR /app
ADD --chown=gradle:gradle /app/myProject /app
RUN ./gradlew build --stacktrace
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11606 次 |
| 最近记录: |