【问题标题】:Unable to run Java on Dockerfile since yesterday从昨天开始无法在 Dockerfile 上运行 Java
【发布时间】:2019-04-18 14:13:05
【问题描述】:

我有一套量角器,为此我需要在我的 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 的任何具体原因?
  • 正如我所说 - 我需要 Java 来启动 selenium-server.jar 文件 - 在执行量角器测试之前需要启动它。在本地,此显式设置使用 directConnect 标志。但是,在 CI-CD 管道中运行时,后者会失败。

标签: java docker dockerfile


【解决方案1】:

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

不过,在您的情况下,我会构建一个集中式 selenium 服务器或在 CI 管道中使用 directConnect

【讨论】:

  • 我最终复制了您提供的链接中提到的 openjdk 中的步骤,
【解决方案2】:

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

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

在 Docker 上下文中,对此的正确答案是始终在同一 RUN 步骤中运行 apt-get updateapt-get install。您可能会将Dockerfile 的结尾更改为如下所示

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

一旦您完成了最初的开发阶段,最好在 Dockerfile 中只使用一个 apt install 命令来安装您需要的所有运行时依赖项。

【讨论】:

  • 感谢您的指点。但是,即使更改您提到的行也会给我相同的输出(--no-cacheapt-get update and install 在同一行中。
猜你喜欢
  • 1970-01-01
  • 2016-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多