我正在尝试设置一个 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 命令不起作用。
有人知道我做错了什么吗?任何帮助,将不胜感激。预先感谢!
根据多阶段构建:
通过多阶段构建,您可以在您的应用程序中使用多个
语句 Dockerfile。每个FROM
指令可以使用不同的基数,并且每个 他们开始了构建的新阶段。您可以选择性地复制 文物从一个阶段到另一个阶段,留下你的一切 不想出现在最终图像中。FROM
注意:您甚至没有将第一阶段的任何工件用于最终容器,因此您甚至可以丢弃第一个
FROM
阶段...
您还需要在最终图像中声明
ENV JAVA_HOME /usr/lib/jvm
(即,将这一行放在最新的 FROM
声明中)。
此外,您需要在最终映像中一起安装 JDK 和 NodeJS。您可以使用当前的基础镜像来安装 JDK(因为它上面已经有 NodeJS),或者使用已经准备好的镜像(例如,像这样的)。