在docker镜像/容器中安装和使用Gradle

时间:2015-07-07 22:53:31

标签: java gradle build docker dockerfile

在从is89 ! 11创建泊坞窗图片的过程结束时,我收到了这个奇怪的错误:

is89 ! 2

Dockerfile的相关部分:

/bin/sh: 1: gradle: not found
INFO[0003] The command [/bin/sh -c gradle test jar] returned a non-zero code: 127

我使用的命令是:Dockerfile

奇怪的是,如果:

  • 我在上一张图片中运行一个容器,注释掉FROM debian:jessie [...] RUN curl -L https://services.gradle.org/distributions/gradle-2.4-bin.zip -o gradle-2.4-bin.zip RUN apt-get install -y unzip RUN unzip gradle-2.4-bin.zip RUN echo 'export GRADLE_HOME=/app/gradle-2.4' >> $HOME/.bashrc RUN echo 'export PATH=$PATH:$GRADLE_HOME/bin' >> $HOME/.bashrc RUN /bin/bash -c "source $HOME/.bashrc" RUN gradle test jar [...] (命令:docker build -t java_i .),
  • 然后我登录到该容器(命令:RUN gradle test jar),
  • 然后我手动检查找到它们的gradle环境变量,
  • 然后我从正在运行的容器(docker run -d -p 9093:8080 -p 9094:8081 --name java_c -i -t java_i)中手动运行该注释掉的命令:

我最终获得了预期的输出(docker exec -it java_c bash文件夹中编译的java代码。)

我正在使用Docker版本1.6.2

4 个答案:

答案 0 :(得分:5)

我使用ENV泊坞窗说明(link to the documentation)解决了问题。

ENV GRADLE_HOME=/app/gradle-2.4
ENV PATH=$PATH:$GRADLE_HOME/bin

答案 1 :(得分:3)

此命令/bin/bash -c "source $HOME/.bashrc"表示您创建一个新的非交互式进程并在其中运行命令以在其中设置环境变量。这不会影响父进程。一旦设置了变量,流程就会退出。您可以通过运行以下内容来检查:

RUN /bin/bash -c "source $HOME/.bashrc; env"
RUN env

这个选项应该起作用:

RUN source ~/.bashrc

当您登录时它的工作原因是因为新流程读取已更新~/.bashrc

答案 2 :(得分:1)

我试图使用JDK 11.0.7安装相同版本,但是gradle-2.4不起作用。并出现以下错误


FAILURE: Build failed with an exception.

* What went wrong:
Could not determine java version from '11.0.7'.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

我安装了更高版本以解决安装后的上述问题。
发布答案可能会对其他人有所帮助。

FROM openjdk:11.0.7-jdk
RUN apt-get update && apt-get install -y unzip
WORKDIR /gradle
RUN curl -L https://services.gradle.org/distributions/gradle-6.5.1-bin.zip -o gradle-6.5.1-bin.zip
RUN unzip gradle-6.5.1-bin.zip
ENV GRADLE_HOME=/gradle/gradle-6.5.1
ENV PATH=$PATH:$GRADLE_HOME/bin
RUN gradle --version

答案 3 :(得分:1)

您可以使用多阶段构建和 Gradle Docker 映像(无需安装 Gradle...)来构建应用程序,然后在运行时容器中使用结果:

# Build
FROM gradle AS build

WORKDIR /appbuild
COPY . /appbuild

RUN gradle --version
# here goes your build code

一旦 Gradle 构建完成,切换到运行时容器:

# Runtime
FROM openjdk:8-jre-alpine

# more stuff here...

COPY --from=0 appbuild/<somepath>/some.jar application.jar

# more stuff here...

COPY 命令将构建工件从构建阶段复制到运行时容器(在本例中为 jar 文件)。