代码之家  ›  专栏  ›  技术社区  ›  Sergii Bishyr

在Docker中构建gradle项目

  •  8
  • Sergii Bishyr  · 技术社区  · 8 年前

    我有一个简单的gradle项目,我想在Docker容器中构建它

    我有一个多级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
    

    和stacktrace:

    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

    2 回复  |  直到 8 年前
        1
  •  14
  •   Raghwendra Singh    8 年前

    根据 Dockerfile 对于gradle:4.2.1-jdk8-alpine at,它具有“ gradle “作为默认用户。您正在从应用程序目录复制到docker image的应用程序目录的文件可能没有“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
    
        2
  •  9
  •   zaerymoghaddam    7 年前

    ADD 命令而不是 COPY --chown 复制后更改文件所有者的选项。因此,最终的Dockerfile将更加简单。

    FROM gradle:4.2.1-jdk8-alpine
    WORKDIR /app
    ADD --chown=gradle:gradle /app/myProject /app
    
    RUN ./gradlew build --stacktrace