自昨天以来无法在Dockerfile上运行Java

问题描述 投票:0回答:2

我有一个Protractor的设置,我需要在我的Dockerfile中使用java来运行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帖子并应用了所提到的所有更改,但错误仍然存​​在,或者我收到一个新错误,它回到此无法下载错误。

我尝试过在thisthisthisthisthisthisthis中提到的解决方案,但未能解决它。

完整的日志文件是here。如果需要,我可以发布我在尝试应用所提到的解决方案时得到的错误。

寻找解决此问题的任何指针。

java docker dockerfile
2个回答
0
投票

你真的需要oracle jdk吗?在传递中,我使用openjdk中的Dockerfile内容从节点构建图像并安装java:https://github.com/docker-library/openjdk/blob/master/8/jdk/Dockerfile

然而,在您的情况下,我将构建一个集中的selenium服务器或在CI管道中使用directConnect


0
投票

Docker会记住运行每个命令的结果,除非你明确地告诉它(docker build --no-cache)。特别是,如果它认为已经完成了这个步骤,它将跳过运行apt-get update步骤。

同时,Debian和Ubuntu存储库经常更新,当它们更新时,它们会删除旧版本的软件包。这意味着如果您使用的是昨天版本的软件包缓存,那么在您重新运行apt-get update之前,您将看到“下载失败”错误。

在Docker上下文中,对此的正确答案是始终在相同的apt-get update步骤中运行apt-get installRUN。您可以将Dockerfile的结尾更改为

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

一旦你已经超过了最初的开发阶段,在Dockerfile中只有一个apt install命令可以很好地练习,它可以在安装你需要的所有运行时依赖项时完成一次。

© www.soinside.com 2019 - 2024. All rights reserved.