Как установить oracle-java8-installer на докер debian:jessie

Я пытаюсь установить java 8 через oracle-java8-installer в док-контейнер debian: jessie. Вот мой Dockerfile:

FROM debian:jessie

ENV JAVA_VERSION 1.8.0

RUN echo "deb http://ppa.launchpad.net/webupd8team/java/ubuntu trusty main" > /etc/apt/sources.list.d/webupd8team-java.list
RUN echo "deb-src http://ppa.launchpad.net/webupd8team/java/ubuntu trusty main" >> /etc/apt/sources.list.d/webupd8team-java.list
RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys EEA14886
RUN echo "debconf shared/accepted-oracle-license-v1-1 select true" | /usr/bin/debconf-set-selections
RUN apt-get update
RUN apt-get install -y --force-yes vim
RUN apt-get install -y --force-yes oracle-java8-installer

Тем не менее, это дает:

Connecting to download.oracle.com (download.oracle.com)|23.63.224.171|:80... connected.
HTTP request sent, awaiting response... 404 Not Found
2018-01-17 12:31:05 ERROR 404: Not Found.

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-get install -y --force-yes oracle-java8-installer' returned a non-zero code: 100

Я нашел много похожих проблем, описанных в Интернете, но ни одно из предложенных решений не помогло мне. Есть идеи?


person Jacopo Lanzoni    schedule 17.01.2018    source источник
comment
У меня нет соответствующего опыта работы с докером, но я использую Debian в течение некоторого времени, и мне кажется нехорошим, что вы устанавливаете пакет из репозитория Ubuntu в Debian. Когда мне нужно установить Oracle JDK, я загружаю его с сайта Oracle и создаю файл .deb с java-пакетом, как описано здесь.   -  person Andriy Simonov    schedule 17.01.2018


Ответы (5)


Решение найдено на https://hub.docker.com/r/anapsix/docker-oracle-java8/~/dockerfile/:

## JAVA INSTALLATION
RUN echo "oracle-java8-installer shared/accepted-oracle-license-v1-1 select true" | debconf-set-selections
RUN echo "deb http://ppa.launchpad.net/webupd8team/java/ubuntu trusty main" > /etc/apt/sources.list.d/webupd8team-java-trusty.list
RUN apt-key adv --keyserver keyserver.ubuntu.com --recv-keys EEA14886
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --force-yes --no-install-recommends oracle-java8-installer && apt-get clean all

«Секретный соус», который вы искали, — это первая строка:

RUN echo "oracle-java8-installer shared/accepted-oracle-license-v1-1 select true" | debconf-set-selections
person Stephen Quan    schedule 25.07.2018
comment
Команда '/bin/sh -c apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --force-yes --no-install-recommends oracle-java8-installer && apt-get clean all' вернула не -нулевой код: 100 - person ses; 18.07.2019

Что касается ответа donhector и вашего вопроса: вам нужно заменить строки в файле установщика вместо вашей последней команды:

apt-get install -y --force-yes oracle-java8-installer

запустите эти команды:

apt-get -y install oracle-java8-installer || true
cd /var/lib/dpkg/info

sed -i 's|JAVA_VERSION=8u151|JAVA_VERSION=8u162|' oracle-java8-installer.*
sed -i 's|PARTNER_URL=http://download.oracle.com/otn-pub/java/jdk/8u151-b12/e758a0de34e24606bca991d704f6dcbf/|PARTNER_URL=http://download.oracle.com/otn-pub/java/jdk/8u162-b12/0da788060d494f5095bf8624735fa2f1/|' oracle-java8-installer.*
sed -i 's|SHA256SUM_TGZ="c78200ce409367b296ec39be4427f020e2c585470c4eed01021feada576f027f"|SHA256SUM_TGZ="68ec82d47fd9c2b8eb84225b6db398a72008285fafc98631b1ff8d2229680257"|' oracle-java8-installer.*
sed -i 's|J_DIR=jdk1.8.0_151|J_DIR=jdk1.8.0_162|' oracle-java8-installer.*

apt-get install -f -y
apt-get install -y oracle-java8-set-default

У меня они в отдельном скрипте и запускаю его как

RUN /bin/sh /path/to/script.sh

или вы можете запустить их прямо из своего Dockerfile, это на ваше усмотрение.

person Martin Šuráb    schedule 19.01.2018
comment
Спасибо, Мартин, ты сэкономил мне время, я почти начал делать это вручную. - person Paweł Woźniak; 22.01.2018
comment
то, что сработало для меня, не запускало команды из Dockerfile, НО создавало скрипт и использовало RUN /bin/sh /path/to/script.sh - person Guillermo Mosse; 28.12.2018

Вы устанавливаете из репозитория webupd8 PPA. Если вы заметили, пакет Java 8 в этом репозитории указывает на версию Java 8 151. Этот пакет извлекает двоичный файл для 151 с серверов Oracle (поскольку лицензия Java Oracle не позволяет никому другому размещать двоичные файлы). Oracle выпустила версию 161 пару дней назад и, по-видимому, переместила или удалила 151 со своих серверов. Таким образом, в основном пакет в репозитории webupd8 PPA пытается загрузить двоичный файл 151, который больше не существует в том месте, где его ожидает пакет webupd8 (отсюда и 404, который вы получили). Сопровождающий репозиторий webupd8 PPA должен будет выпустить новый пакет, указывающий на новые двоичные файлы 161 от Oracle. Docker или Debian не играют никакой роли в проблеме, это просто проблема с неработающей ссылкой.

До тех пор вы можете применить «обходной путь», подобный упомянутому здесь: JDK 8 НЕ установлен - ОШИБКА 404: не найдено

Вот список пакетов Java в репозитории webupd8:

https://launchpad.net/~webupd8team/+archive/ubuntu/java/+packages

person donhector    schedule 17.01.2018
comment
Связанный JDK 8 НЕ установлен, ответ был очень полезным - person Cumulo Nimbus; 17.01.2018
comment
Спасибо за четкое объяснение @donhector. У меня есть идея обходного пути, но я не могу понять, как его реализовать. Где я должен добавить следующее? RUN apt-get --download-only -y --force-yes install oracle-java8-installer RUN sed -i ... /var/cache/apt/archives/oracle-java8-installer* ... - person Jacopo Lanzoni; 18.01.2018

См. ошибка dpkg oracle Jdk при установке cassandra в Ubuntu 16.04. Эта проблема возникает у всех, кто использует сценарии установки любого типа.

person DoctorPangloss    schedule 17.01.2018

** Ява 11:

RUN apt-get install wget java-common gnupg2 -y
RUN echo "oracle-java11-installer shared/accepted-oracle-license-v1-2 select true" | debconf-set-selections
RUN echo "deb http://ppa.launchpad.net/linuxuprising/java/ubuntu bionic main" | tee /etc/apt/sources.list.d/linuxuprising-java.list
RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 73C3DB2A
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends oracle-java11-installer && apt-get clean all
person rodrigoclp    schedule 23.05.2019