基于tomcat:9在Dockerfile中为运行 Maven配置JDK
Configure JDK for running Maven inside Dockerfile based on tomcat:9
我正在尝试构建一个基于标准 Docker 图像 tomcat:9
的 Docker 图像,它也可以使用 Maven 编译 Java:
当我第一次 docker run
tomcat: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
派生的 Docker 图像
FROM tomcat:9
RUN apt-get update
RUN apt-get install -y openjdk-7-jdk maven
和 docker run
我得到这些结果:
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 文件中(并且在我的 pom.xml
所在的目录中),
我收到此错误消息:
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
)是正确的方法还是有更好的方法,例如在系统完整性方面?
默认情况下 tomcat:9 Docker image 自带 JRE 8。所以,你只需要安装 JDK 8 来使用 javac .
apt-get install openjdk-8-jdk maven
我正在尝试构建一个基于标准 Docker 图像 tomcat:9
的 Docker 图像,它也可以使用 Maven 编译 Java:
当我第一次 docker run
tomcat: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
和 docker run
我得到这些结果:
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 文件中(并且在我的 pom.xml
所在的目录中),
我收到此错误消息:
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
)是正确的方法还是有更好的方法,例如在系统完整性方面?
默认情况下 tomcat:9 Docker image 自带 JRE 8。所以,你只需要安装 JDK 8 来使用 javac .
apt-get install openjdk-8-jdk maven