java - 从昨天开始无法在 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 , this和this , this , this , this中提到的解决方案,但无法解决。
完整的日志文件在这里。如果需要,我可以发布我在尝试应用提到的解决方案时遇到的错误。
寻找解决此问题的任何指示。
解决方案
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
一旦你已经过了最初的开发阶段,apt install
在你的 Dockerfile 中只使用一个命令来安装你需要的所有运行时依赖项可能是一个好习惯。
推荐阅读
- php - 有没有办法将 html 代码放入 file_put_contents() 函数中?
- json - JSON响应迅速解码为零
- javascript - 在 HTML 表格中正确设置绘图的大小
- three.js - 为什么 setFromMatrix() 位置不起作用?
- json - 从 swagger JSON 中获取建议的示例值
- python - for 循环中的 Python pack() 函数似乎没有
- c# - ASP.NET MVP 组合
- html - 使用动态项目数设置每行的弹性列
- permissions - TYPO3 权限:允许后端用户复制内容元素但不能编辑它们(或:如何为用户提供内容元素库以进行复制)
- r - 通过在 r 中的 for 循环内循环一个向量,使用 mutate 添加新变量