我正在尝试设置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命令不起作用。
有人知道我在做什么错吗?任何帮助,将不胜感激。预先感谢!
答案 0 :(得分:0)
对于多阶段构建,您可以在自己的文档中使用多个
FROM
语句 Dockerfile。每个FROM
指令可以使用不同的基数,并且每个 他们中的一个开始了构建的新阶段。您可以有选择地复制 从一个阶段到另一个阶段的人工制品, 不需要最后一张图片。
注意:您甚至没有使用第一阶段的任何工件作为最终容器,因此您甚至可以丢弃第一阶段FROM
...
您还需要在最终图像中声明ENV JAVA_HOME /usr/lib/jvm
(即,在最新的FROM
语句后加上一行)。
此外,您需要在最终映像中一起安装JDK和NodeJS。您可以install the JDK使用当前的基础映像(因为它已经具有NodeJS),也可以使用已经准备好的映像(例如,like this one)。