JAVA_HOME в Docker-контейнере - PullRequest
0 голосов
/ 01 ноября 2019

Я пытаюсь настроить Dockerfile, чтобы в нем были инструкции по настройке переменной среды JAVA_HOME в контейнере при его запуске. Тогда это устанавливает мое приложение узла. Мне нужна среда Java для библиотеки xsd-schema-validator. Для библиотеки требуется среда 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 не работают.

Кто-нибудь знает, что я делаю неправильно? Любая помощь будет оценена. Заранее спасибо!

1 Ответ

0 голосов
/ 01 ноября 2019

Согласно многоэтапной сборке :

В многоэтапных сборках вы используете несколько операторов FROM в вашем Dockerfile. Каждая FROM инструкция может использовать различную базу, и каждая из них начинает новый этап сборки. Вы можете выборочно копировать артефакты с одного этапа на другой, оставляя после себя все, что вам не нужно, в конечном изображении.

Примечание. Вы даже не используете никакихартефакты с первого этапа для вашего финального контейнера, так что вы даже можете отказаться от первого FROM этапа ...

Вам также нужно объявить ENV JAVA_HOME /usr/lib/jvm на вашем окончательном изображении (т.е. в последнем FROM утверждении).

Кроме того, вам нужно, чтобы JDK и NodeJS были установлены вместе в вашем окончательном образе. Вы можете установить JDK , используя свой текущий базовый образ (так как на нем уже установлен NodeJS), или использовать уже подготовленное изображение (например, что-то , например, ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...