TPP*_*PPZ 1 java build gradle docker dockerfile
在从以下位置创建docker镜像的过程结束时,我收到了这个奇怪的错误Dockerfile:
/bin/sh: 1: gradle: not found
INFO[0003] The command [/bin/sh -c gradle test jar] returned a non-zero code: 127
Run Code Online (Sandbox Code Playgroud)
相关部分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
[...]
Run Code Online (Sandbox Code Playgroud)
我使用的命令是: 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 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 Code Online (Sandbox Code Playgroud)
应该工作的是这个选项:
RUN source ~/.bashrc
Run Code Online (Sandbox Code Playgroud)
并且它在您登录时起作用的原因是因为新进程读取了 already updated ~/.bashrc。
我使用ENVdocker说明解决了这个问题(链接到文档).
ENV GRADLE_HOME=/app/gradle-2.4
ENV PATH=$PATH:$GRADLE_HOME/bin
Run Code Online (Sandbox Code Playgroud)