2016-08-21 93 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