Docker 容器中的 JAVA_HOME

问题描述 投票:0回答:1

我正在尝试设置一个 Dockerfile,以便它具有在容器启动时设置 JAVA_HOME 环境变量设置的说明。然后它安装我的节点应用程序。我需要 xsd-schema-validator 库的 Java 环境。该库需要在容器中设置 JAVA_HOME 环境。这就是我所拥有的:

FROM openjdk:9

ENV JAVA_HOME  /usr/lib/jvm
RUN export JAVA_HOME

RUN echo $JAVA_HOME

FROM collinestes/docker-node-oracle:latest

# Create app directory
WORKDIR /usr/src/app

COPY package*.json ./

RUN npm install

COPY . .
RUN npm run build

RUN npm run package

# Bundle app source
COPY . ./build

CMD [ "node", "bundle-app.js" ]

节点应用程序似乎启动正常。 docker 容器启动时我没有看到任何错误。但是,当我调用应用程序时,它崩溃并出现错误 javaError:spawn javac ENOENT

我认为这是因为容器没有设置 JAVA_HOME 变量。我已经完成了

docker exec -i -t container bash
并尝试了命令
echo $JAVA_HOME
,但它没有显示 java 可执行文件。此外,java 和 javac 命令不起作用。

有人知道我做错了什么吗?任何帮助,将不胜感激。预先感谢!

java docker dockerfile
1个回答
0
投票

根据多阶段构建

通过多阶段构建,您可以在您的应用程序中使用多个

FROM
语句 Dockerfile。每个
FROM
指令可以使用不同的基数,并且每个 他们开始了构建的新阶段。您可以选择性地复制 文物从一个阶段到另一个阶段,留下你的一切 不想出现在最终图像中。

注意:您甚至没有将第一阶段的任何工件用于最终容器,因此您甚至可以丢弃第一个

FROM
阶段...

您还需要在最终图像中声明

ENV JAVA_HOME /usr/lib/jvm
(即,将这一行放在最新的
FROM
声明中)。

此外,您需要在最终映像中一起安装 JDK 和 NodeJS。您可以使用当前的基础镜像来安装 JDK(因为它上面已经有 NodeJS),或者使用已经准备好的镜像(例如,像这样的)。

© www.soinside.com 2019 - 2024. All rights reserved.