Не удалось запустить Java на Dockerfile со вчерашнего дня - PullRequest
1 голос
/ 18 апреля 2019

У меня есть набор Protractor, для которого мне нужно java в моем Dockerfile для запуска файла selenium-server.jar.

Вот мой Dockerfile

FROM node:latest


ENV CHROME_VERSION "google-chrome-stable"
RUN sed -i -- 's&deb http://deb.debian.org/debian jessie-updates main&#deb http://deb.debian.org/debian jessie-updates main&g' /etc/apt/sources.list \
  && apt-get -o Acquire::Check-Valid-Until=false update && apt-get -o Acquire::Check-Valid-Until=false install wget -y
ENV CHROME_VERSION "google-chrome-stable"
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \
  && echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list \
  && apt-get -o Acquire::Check-Valid-Until=false update && apt-get -qqy --allow-unauthenticated install ${CHROME_VERSION:-google-chrome-stable}



# Add the dependencies to get the xenial apt sources
RUN echo "deb http://ppa.launchpad.net/webupd8team/java/ubuntu xenial main" | tee /etc/apt/sources.list.d/webupd8team-java.list
RUN echo "deb-src http://ppa.launchpad.net/webupd8team/java/ubuntu xenial main" | tee -a /etc/apt/sources.list.d/webupd8team-java.list
RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys EEA14886
RUN apt-get -y update

# Add these silent accept - since oracle installer asks for permission to install java-version-8
RUN echo "oracle-java8-installer shared/accepted-oracle-license-v1-1 select true" | debconf-set-selections
RUN echo "oracle-java8-installer shared/accepted-oracle-license-v1-1 seen true" | debconf-set-selections

# Install java-8 


RUN apt install -y oracle-java8-installer && apt install oracle-java8-set-default

Эта установка работала нормально до вчерашнего дня, но с тех пор я получаю эту ошибку

 download failed
Oracle JDK 8 is NOT installed.
dpkg: error processing package oracle-java8-installer (--configure):
 subprocess installed post-installation script returned error exit status 1
Errors were encountered while processing:
 oracle-java8-installer
E: Sub-process /usr/bin/dpkg returned an error code (1)
The command '/bin/sh -c apt install -y oracle-java8-installer && apt install oracle-java8-set-default' returned a non-zero code: 100

Теперь, прежде чем пометить этот вопрос как дубликат, пожалуйста, обратите внимание, что я просмотрел много подобных сообщений SO и применил все упомянутые изменения, но ошибка все еще сохраняется, или я получаю новую ошибку, которая возвращается к этой неспособной ошибка загрузки.

Я пробовал решения, упомянутые в это , это , это и это , это , это , это , но мы не смогли его решить.

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

Ищем какие-либо указатели для решения этой проблемы.

Ответы [ 2 ]

0 голосов
/ 18 апреля 2019

Вам действительно нужен оракул JDK?На этом этапе я использовал содержимое Dockerfile из openjdk для создания образа из узла и установки java: https://github.com/docker-library/openjdk/blob/master/8/jdk/Dockerfile

Тем не менее, в вашем случае я бы собрал централизованный сервер селена или использовал directConnect в трубопроводе CI.

0 голосов
/ 18 апреля 2019

Docker запомнит результат выполнения каждой команды, если вы явно не укажете (docker build --no-cache). В частности, он пропустит выполнение шага apt-get update, если сочтет, что уже сделал это.

Между тем, репозитории Debian и Ubuntu часто обновляются, а при обновлении удаляют старые версии пакетов. Это означает, что если вы используете вчерашнюю версию кэша пакетов, вы будете получать ошибки «загрузка не удалась», как вы видите, до тех пор, пока вы не перезапустите apt-get update.

В контексте Docker правильный ответ на это: всегда запускать apt-get update и apt-get install на одном и том же RUN шаге . Вы можете изменить конец вашего Dockerfile на

RUN apt-get update -y \
 && apt install oracle-java8-installer oracle-java8-set-default

После того, как вы прошли начальную стадию разработки, вероятно, хорошей практикой будет просто иметь одну команду apt install в вашем Dockerfile, которая выполняет один шаг при установке всех необходимых вам зависимостей времени выполнения.

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