我有一个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帖子并应用了所提到的所有更改,但错误仍然存在,或者我收到一个新错误,它回到此无法下载错误。
我尝试过在this,this,this和this,this,this,this中提到的解决方案,但未能解决它。
完整的日志文件是here。如果需要,我可以发布我在尝试应用所提到的解决方案时得到的错误。
寻找解决此问题的任何指针。
你真的需要oracle jdk吗?在传递中,我使用openjdk中的Dockerfile内容从节点构建图像并安装java:https://github.com/docker-library/openjdk/blob/master/8/jdk/Dockerfile
然而,在您的情况下,我将构建一个集中的selenium服务器或在CI管道中使用directConnect
。
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
一旦你已经超过了最初的开发阶段,在Dockerfile中只有一个apt install
命令可以很好地练习,它可以在安装你需要的所有运行时依赖项时完成一次。