在从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
),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
答案 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 文件)。