在 docker image/container 中安装和使用 Gradle
Installing and using Gradle in a docker image/container
我在从 Dockerfile
创建 docker 图像的过程结束时收到这个奇怪的错误:
/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
(命令:docker run -d -p 9093:8080 -p 9094:8081 --name java_c -i -t java_i
),
- 然后我登录到那个容器(命令:
docker exec -it java_c bash
),
- 然后我手动检查 gradle 环境变量找到它们,
- 然后我手动 运行 从 运行ning 容器 (
gradle test jar
): 中注释掉命令
我最终得到了预期的输出(build
文件夹中编译的 java 代码)。
我正在使用 Docker 版本 1.6.2
这个命令/bin/bash -c "source $HOME/.bashrc"
意味着你创建了一个新的非交互进程和运行其中的一个命令来在那里设置环境变量。这不会影响父进程。一旦设置了变量,进程就会退出。您可以通过 运行 宁这样的东西来检查:
RUN /bin/bash -c "source $HOME/.bashrc; env"
RUN env
这个选项应该起作用:
RUN source ~/.bashrc
它在您登录时起作用的原因是因为新进程读取已经更新~/.bashrc
。
我使用 ENV
docker 说明 (link to the documentation) 解决了问题。
ENV GRADLE_HOME=/app/gradle-2.4
ENV PATH=$PATH:$GRADLE_HOME/bin
我试图安装与 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
您可以使用多阶段构建和 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 文件)。
我在从 Dockerfile
创建 docker 图像的过程结束时收到这个奇怪的错误:
/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
(命令:docker run -d -p 9093:8080 -p 9094:8081 --name java_c -i -t java_i
), - 然后我登录到那个容器(命令:
docker exec -it java_c bash
), - 然后我手动检查 gradle 环境变量找到它们,
- 然后我手动 运行 从 运行ning 容器 (
gradle test jar
): 中注释掉命令
我最终得到了预期的输出(build
文件夹中编译的 java 代码)。
我正在使用 Docker 版本 1.6.2
这个命令/bin/bash -c "source $HOME/.bashrc"
意味着你创建了一个新的非交互进程和运行其中的一个命令来在那里设置环境变量。这不会影响父进程。一旦设置了变量,进程就会退出。您可以通过 运行 宁这样的东西来检查:
RUN /bin/bash -c "source $HOME/.bashrc; env"
RUN env
这个选项应该起作用:
RUN source ~/.bashrc
它在您登录时起作用的原因是因为新进程读取已经更新~/.bashrc
。
我使用 ENV
docker 说明 (link to the documentation) 解决了问题。
ENV GRADLE_HOME=/app/gradle-2.4
ENV PATH=$PATH:$GRADLE_HOME/bin
我试图安装与 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
您可以使用多阶段构建和 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 文件)。