如何在docker debian上安装oracle-java8-installer:jessie

如何在docker debian上安装oracle-java8-installer:jessie,docker,java-8,debian,debian-jessie,Docker,Java 8,Debian,Debian Jessie,我试图通过oracle-java8-installer在debian:jessie docker容器上安装java8。以下是我的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

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

我在网上发现了许多类似的问题,但没有一个解决方案适合我。有什么想法吗?

见。使用任何类型的安装脚本的每个人都会遇到此问题。

您是从webupd8 PPA repo安装的。如果您注意到,repo中的java8包指向java8版本
151
。该包从Oracle服务器中提取
151
的二进制文件(因为Java Oracle许可证不允许任何其他人托管二进制文件)。几天前,Oracle发布了版本
161
,显然从他们的服务器上移动或删除了
151
。因此,webupd8 PPA回购协议中的包基本上是在尝试下载
151
二进制文件,该二进制文件不再存在于webupd8包所期望的位置(因此得到了404)。webupd8 PPA回购维护人员必须发布一个指向Oracle新的
161
二进制文件的新包。Docker或Debian在这个问题上没有扮演任何角色,它基本上只是一个断开链接的问题

在此之前,您可以应用此处提到的“变通方法”:

以下是webupd8 repo中的Java包列表:


关于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运行它们,这取决于您。

在以下位置找到解决方案:

你要找的“秘方”是第一行:

RUN echo "oracle-java8-installer shared/accepted-oracle-license-v1-1 select true" | debconf-set-selections
**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

我对docker没有相关的经验,但我使用Debian有一段时间了,你在Debian上安装ubuntu存储库中的包对我来说并不好。当我需要安装Oracle JDK时,我从Oracle站点下载它,并使用java包创建一个.deb文件,如前所述。链接的“JDK 8未安装”回答非常有用感谢@donhector的清晰解释。我了解解决方法,但不知道如何实施。我应该在哪里添加以下内容?运行apt-get--download only-y--force yes安装oracle-java8-installer运行sed-i/var/cache/apt/archives/oracle-java8-installer*…谢谢Martin,你节省了我的时间,我也开始手动操作了对我有用的不是运行Dockerfile中的命令,但是创建脚本并使用RUN/bin/sh/path/to/script.sh命令“/bin/sh-c apt get update&&DEBIAN_FRONTEND=noninteractive apt get install-y--force yes--no install建议使用oracle-java8-installer&&apt get clean all”返回一个非零代码:100
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