当前位置: 首页 > 知识库问答 >
问题:

在Docker中构建gradle项目

岳迪
2023-03-14

我有一个简单的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

和stacktraces:

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用户没有在工作目录下创建文件的权限,如何添加这些权限?简单的< code >运行chmod 777 /app不起作用,并告诉我:< code>chmod: /app:不允许操作

共有2个答案

张腾
2023-03-14

另一个选项可能是使用ADD命令而不是COPY,然后使用它的--chown选项在复制后更改文件的所有者。因此,最终的 Dockerfile 会更简单。

FROM gradle:4.2.1-jdk8-alpine
WORKDIR /app
ADD --chown=gradle:gradle /app/myProject /app

RUN ./gradlew build --stacktrace
段晨
2023-03-14

根据 Dockerfile for gradle:4.2.1-jdk8-alpine at ,它有 “gradle” 作为它的默认用户。从应用程序目录复制到 Docker 映像的应用程序目录的文件可能没有“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
 类似资料:
  • 找不到符号symbol:类JSONObject java文件中存在jsonobject和json数组的所有地方都有红色标记。 我已经将包含所有jar文件的文件夹web inf/lib放在我创建的src/main/webapp目录中。

  • 主要内容:多项目构建的结构,指定常规构建配置,项目指定配置和依赖关系,Gradle多项目构建的示例,子项目配置,参考可以轻松处理各种大小规模的项目。小项目由一个单一的构建文件和一个源代码树构成。 大项目可以将其拆分成更小的,相互依赖的模块,以便更容易理解。Gradle完美支持这种多项目构建的场景。 多项目构建的结构 这种构建有各种形状和大小,但它们都有一些共同的特点 - 在项目的根目录或主目录中都有一个文件。 根目录或主目录都有一个文件。 具有自己的构建文件的子目录(某些多项目构建可能会省略子项

  • 主要内容:Groovy插件,Groovy项目的默认项目布局本章介绍如何使用文件编译和执行Groovy项目。 Groovy插件 Gradle的Groovy插件扩展了Java插件,并为Groovy程序提供了任务。可以使用以下行来应用groovy插件。 完整的构建脚本文件如下。将以下代码复制到文件中。 可以使用以下命令来执行构建脚本。 Groovy项目的默认项目布局 Groovy插件假定Groovy项目有手动做过一定的设置。 包含Groovy源代码; 包含Gr

  • 主要内容:Java默认的项目布局,初始化任务执行,指定Java版本本章介绍如何使用Gradle构建文件来构建一个Java项目。 首先,我们必须向构建脚本中添加Java插件,因为它提供了编译Java源代码,运行单元测试,创建Javadoc和创建JAR文件的任务。 在文件中使用以下代码行。 怎么样,是不是很简单? Java默认的项目布局 每当添加一个插件到构建中,它会假设一个特定的Java项目设置(类似于Maven)。看看下面的目录结构。 目录包含Java源代码;

  • 我有一个gradle groovy项目,其中我只有groovy脚本,它们不在源目录中,而是在一个单独的目录中。此外,我还有groovy junit测试,这些测试使用groovy shell测试调用它们的脚本。 我有一个gradle构建来运行测试,然后将脚本压缩到单独的zip文件中,并将它们上传到maven repo中。问题是,gradle还创建并上传了一个jar文件。由于源目录中没有文件,jar只