首页 > 解决方案 > 在 Docker 容器中从 JRE 更改为 JDK

问题描述

我使用 tomcat、jre 8(openjdk)、alpine linux 作为基础镜像。我的 Dockerfile 如下:

FROM tomcat:8.5.39-jre8-alpine

RUN rm -rf /usr/local/tomcat/webapps/*

COPY target/openjdk8-8.252.09-r0.apk /usr/local/tomcat/.

RUN apk add --allow-untrusted /usr/local/tomcat/openjdk8-8.252.09-r0.apk

ENV JAVA_HOME=/usr/lib/jvm/java-1.8-openjdk

ENV PATH=/usr/local/tomcat/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/jvm/java-1.8-openjdk/bin

RUN export JAVA_HOME

RUN export PATH

我想使用 jdk8 而不是 jre8。
为此,我下载了相同版本的 JDK8 并将其安装在 alpine linux 上。

COPY target/openjdk8-8.252.09-r0.apk /usr/local/tomcat/.
RUN apk add --allow-untrusted /usr/local/tomcat/openjdk8-8.252.09-r0.apk 

为了确保获取所需的 java(JDK8),我设置了 JAVA_HOME 和 PATH。

ENV JAVA_HOME=/usr/lib/jvm/java-1.8-openjdk
ENV PATH=/usr/local/tomcat/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/jvm/java-1.8-openjdk/bin

但是当我运行 Tomcat(当我运行容器时)时, /usr/lib/jvm/java-1.8-openjdk/jre仍然在控制台中登录,这意味着原始 JRE 仍在使用中。

我读过这个。 但我不明白他的意思是什么。

有什么解决方法或任何方法可以让它工作吗?或者我在哪里犯错了?

干杯

标签: javadockertomcatjava-8alpine

解决方案


我在 Docker 映像中使用 OpenJDK8 和 Alpine 以及以下 Docker:

FROM alpine:3.11.3
ENV LANG=C.UTF-8 \
      JAVA_HOME=/usr/lib/jvm/java-1.8-openjdk \
      PATH=$PATH:/usr/lib/jvm/java-1.8-openjdk/bin/

RUN  set -x apk add --no-cache openjdk8

推荐阅读