首页 > 解决方案 > 从昨天开始无法在 Dockerfile 上运行 Java

问题描述

我有一套量角器,我需要java在我的 Dockerfile 中运行该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 , thisthis , this , this , this中提到的解决方案,但无法解决。

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

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

标签: javadockerdockerfile

解决方案


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

同时,Debian 和 Ubuntu 存储库更新频繁,当它们更新时,它们会删除旧版本的软件包。这意味着,如果您使用的是昨天版本的包缓存,您将收到“下载失败”错误,就像您看到的一样,直到您重新运行apt-get update.

在 Docker 上下文中,对此的正确答案是始终在同一步骤apt-get updateapt-get installRUN运行。你可能会改变你的结尾Dockerfile看起来像

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

一旦你已经过了最初的开发阶段,apt install在你的 Dockerfile 中只使用一个命令来安装你需要的所有运行时依赖项可能是一个好习惯。


推荐阅读