java - 在 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 仍在使用中。
我读过这个。 但我不明白他的意思是什么。
有什么解决方法或任何方法可以让它工作吗?或者我在哪里犯错了?
干杯
解决方案
我在 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
推荐阅读
- python - 如何修复 sqlalchemy.exc.InvalidRequestError:一个或多个映射器无法初始化...原始异常是:viewonly
- python - 从 Reading 类型的对象中提取特定值(Reading 是加载 NEM13 文件时返回的对象)
- c# - CS1061:MyClass 不包含 X 的定义,并且找不到接受 MyClass 类型的第一个参数的扩展方法 X
- c# - SearchResultCollection 类:对象属性值比较
- azure-devops - Azure DevOps 和发布流程,热修复时处理版本控制?
- visual-studio - 在新的 git 体验 VS 16.8 中找不到旧的“同步”
- typescript - 如何推断外部函数的参数类型
- list - Agda 列出自然数的通用列表的最后一个,并与 1 的列表连接
- c++ - 2D FFT 将两个矩阵都转换为 FFT 格式后该怎么办?
- web-scraping - 如何将数据从多页存储到json?