2016-08-21 95 views
-1

我想基于标准多克尔图像tomcat:9也可以使用Java中的Maven编译上建立一个码头工人形象:配置JDK基于Tomcat的内部Dockerfile运行Maven:9

当我第一次docker runtomcat:9我得到这些结果:

java -version      # openjdk version "1.8.0_102" 
javac -version      # javac: command not found 
echo $JAVA_HOME      # /usr/lib/jvm/java-8-openjdk-amd64/jre 
dpkg --get-selections | grep \\-jre # openjdk-8-jre-headless:amd64 
dpkg --get-selections | grep \\-jdk # (none) 
update-alternatives --config java 
# There is only one alternative in link group java (providing /usr/bin/java) 
update-alternatives --config javac # error: no alternatives for javac 

当我然后docker build与此Dockerfile

FROM tomcat:9 
RUN apt-get update 
RUN apt-get install -y openjdk-7-jdk maven 
派生泊坞图像在同Dockerfile(并在我的 pom.xml存在我的目录)

java -version      # java version "1.7.0_111" 
javac -version      # javac 1.7.0_111 
echo $JAVA_HOME      # /usr/lib/jvm/java-8-openjdk-amd64/jre 
dpkg --get-selections | grep \\-jre # default-jre, default-jre-headless, openjdk-7-jre:amd64, openjdk-7-jre-headless:amd64, openjdk-8-jre-headless:amd64 
dpkg --get-selections | grep \\-jdk # penjdk-7-jdk:amd64 
update-alternatives --config java # (3 alternatives 
# /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java, 
# /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java, 
# /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java, 
# with the 1st one selected) 
update-alternatives --config javac 
# There is only one alternative in link group java (providing /usr/bin/javac) 

但是,如果我再RUN mvn package, 我收到此错误信息:

docker run但我得到这些结果

No compiler is provided in this environment. 
Perhaps you are running on a JRE rather than a JDK? 

我该如何让Maven知道在这个环境中安装的JDK(而不是JRE)?

export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64(即改变手动JAVA_HOME)的正确的路要走或是否有更好的方法,例如在系统完整性方面?

+1

由于什么原因您需要Java 7提供的Java 8无法完成的工作? –

+0

@ cricket_007我需要一个JDK(w /'javac')而不是JRE(w/o'javac')。该版本只是次要的。 JDK 8也可以。 – Drux

+0

我明白了。我认为标准方法是独立于容器编译应用程序,然后将卷链接到服务器的WebRoot –

回答

1

默认情况下,tomcat:9 Docker镜像带有JRE 8.所以,您只需要安装JDK 8即可使用javac。

apt-get install openjdk-8-jdk maven