如何在Docker Debian:jessie上安装oracle-java8-installer

12

我正在尝试通过oracle-java8-installer在一个debian:jessie docker容器上安装Java 8。以下是我的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

我在网上找到了很多类似的问题描述,但没有一个提出的解决方案适用于我。有什么想法吗?


我对Docker没有相关经验,但我使用Debian已经有一段时间了。在Debian上从Ubuntu存储库安装软件包并不好。当我需要安装Oracle JDK时,我会从Oracle官网下载并按照此处所述使用java-package创建.deb文件。 - Andriy Simonov
5个回答

9

我在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

1
命令'/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。 - ses

7

回复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中运行它们,这取决于你。


1
谢谢马丁,你节省了我的时间,我差点开始手动做这件事。 - Paweł Woźniak
对我而言有效的方法不是从Dockerfile中运行命令,而是创建一个脚本并使用RUN /bin/sh /path/to/script.sh。 - Guillermo Mosse

5
您正在从webupd8 PPA仓库安装。如果您注意到,该仓库中的Java 8软件包指向Java 8版本 151。该软件包从Oracle服务器获取151的二进制文件(因为Java Oracle许可证不允许任何其他人托管二进制文件)。几天前,Oracle发布了版本161并显然移动或删除了其服务器上的151。因此,webupd8 PPA仓库中的软件包正试图下载151二进制文件,但该文件已不再位于webupd8软件包所期望的位置(因此出现了404错误)。webupd8 PPA仓库维护者将需要发布一个新软件包,指向来自Oracle的新161二进制文件。Docker或Debian在这个问题中没有任何作用,它只是基本上是一个链接损坏的问题。
在此之前,您可以应用像此处提到的“解决方法”:JDK 8 is NOT installed - ERROR 404: Not Found 以下是webupd8仓库中的Java软件包列表: https://launchpad.net/~webupd8team/+archive/ubuntu/java/+packages

链接到“JDK 8未安装”的答案非常有帮助。 - Cumulo Nimbus
感谢 @donhector 的清晰解释。我理解了解决方法的思路,但不知道该如何实现。我应该在哪里添加以下内容?RUN apt-get --download-only -y --force-yes install oracle-java8-installer RUN sed -i ... /var/cache/apt/archives/oracle-java8-installer* ... - Jacopo Lanzoni

2

1
**Java 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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接