如何在Docker容器中安装/添加jdk 7

我在Ubuntu 14.04机器上创build了一个以Python为基础的docker镜像。 我使用的Docker版本是1.12.3。 在图像中使用的Python的基本操作系统是Debian。 我的Docker镜像中也需要JAVA 7(JDK 7)。 它里面几乎没有Python脚本,也很less需要JDK的脚本。

我在图像中获得了JDK 7,但是从过去的几天开始,它停止工作。 这是抛出的错误,oracle-jdk-7软件包不再可用。 然后我尝试从Dockerhub获取JDK 7 Dockerfile内容,并将这些行添加到我的dockerfile中。 它工作了几次,然后开始抛出错误的空间是不够的。

但空间不是问题,因为'/ var'只占29%。 以下是我的Dockerfile内容。

FROM python:2.7 ENV http_proxy http://http.proxy.abc.com:8000 ENV https_proxy http://http.proxy.abc.com:8000 RUN \ apt-get update && \ apt-get install -y openjdk-7-jdk && \ rm -rf /var/lib/apt/lists/* ENV JAVA_HOME /usr/lib/jvm/java-7-openjdk-amd64 RUN pip install datetime && \ pip install pandas && \ pip install xlrd && \ pip install email && \ pip install Jinja2 && \ pip install bokeh==0.12.4 

而我也试过以下的jdk 7:

 RUN echo "deb http://ppa.launchpad.net/webupd8team/java/ubuntu precise main" | tee /etc/apt/sources.list.d/webupd8team-java.list && \ echo "deb-src http://ppa.launchpad.net/webupd8team/java/ubuntu precise main" | tee -a /etc/apt/sources.list.d/webupd8team-java.list && \ apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys EEA14886 && \ apt-get update -qq && \ echo oracle-java7-installer shared/accepted-oracle-license-v1-1 select true | /usr/bin/debconf-set-selections && \ apt-get install oracle-java7-installer libxext-dev libxrender-dev libxtst-dev -y --no-install-recommends && \ apt-get clean autoclean && \ apt-get autoremove --yes && \ rm -rf /var/lib/{apt,dpkg,cache,log}/ && \ rm -rf /var/cache/oracle-jdk7-installer 

这会引发404错误下载失败的错误,并且Oracle JDK 7不会被下载。 这工作很好,直到几天前。

我也试过这个。

 RUN \ apt-get update && \ apt-get install -y openjdk-7-jdk && \ rm -rf /var/lib/apt/lists/* 

这会引发空间已满的错误。 我看到“/ var”只占29%。

试过这也。

 RUN apt-get update && \ apt-get upgrade -y && \ apt-get install -y software-properties-common && \ add-apt-repository ppa:webupd8team/java -y && \ apt-get update && \ echo oracle-java7-installer shared/accepted-oracle-license-v1-1 select true | /usr/bin/debconf-set-selections && \ apt-get install -y oracle-java8-installer && \ apt-get clean 

这会抛出很less包缺失的错误。

请帮我在Docker镜像中获取jdk 7。 任何JDKtypes都可以。 Oracle JDK或打开jdk。

提前致谢。

您的环境包含一个代理定义

 ENV http_proxy http://http.proxy.abc.com:8000 ENV https_proxy http://http.proxy.abc.com:8000 

与此同时,所有到外部的stream量都被路由到一个不存在的位置。 删除这些行,docker将能够检索apt资源。

除此之外,我会在这里给你完整的dockerfile:

 FROM python:2.7-wheezy RUN pip install datetime && \ pip install pandas && \ pip install xlrd && \ pip install email && \ pip install Jinja2 && \ pip install bokeh==0.12.4 # add webupd8 repository RUN \ echo "===> add webupd8 repository..." && \ echo "deb http://ppa.launchpad.net/webupd8team/java/ubuntu trusty main" | tee /etc/apt/sources.list.d/webupd8team-java.list && \ echo "deb-src http://ppa.launchpad.net/webupd8team/java/ubuntu trusty main" | tee -a /etc/apt/sources.list.d/webupd8team-java.list && \ apt-key adv --keyserver keyserver.ubuntu.com --recv-keys EEA14886 && \ apt-get update && \ \ \ echo "===> install Java" && \ echo debconf shared/accepted-oracle-license-v1-1 select true | debconf-set-selections && \ echo debconf shared/accepted-oracle-license-v1-1 seen true | debconf-set-selections && \ DEBIAN_FRONTEND=noninteractive apt-get install -y --force-yes oracle-java8-installer oracle-java8-set-default && \ \ \ echo "===> clean up..." && \ rm -rf /var/cache/oracle-jdk8-installer && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* 

build立它:

  $ docker build -tt . 

它build成后,结果如下:

  $ docker run t java -version java version "1.8.0_131" Java(TM) SE Runtime Environment (build 1.8.0_131-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode) $ docker run t python -V Python 2.7.13 

更新:如果你想使用oracle jdk7,只需在dockerfile中通过以下代码交换安装jdk的代码。 另外请注意,我宁愿将两个不同的jdks保存在不同的docker容器中。 从不同的图像引用所需的java版本是更好的方法,只需在你的内容的名字后面加上内容,比如:docker build -t py27jdk7

 # add webupd8 repository RUN \ echo "===> add webupd8 repository..." && \ echo "deb http://ppa.launchpad.net/webupd8team/java/ubuntu trusty main" | tee /etc/apt/sources.list.d/webupd8team-java.list && \ echo "deb-src http://ppa.launchpad.net/webupd8team/java/ubuntu trusty main" | tee -a /etc/apt/sources.list.d/webupd8team-java.list && \ apt-key adv --keyserver keyserver.ubuntu.com --recv-keys EEA14886 && \ apt-get update && \ \ \ echo "===> install Java" && \ echo debconf shared/accepted-oracle-license-v1-1 select true | debconf-set-selections && \ echo debconf shared/accepted-oracle-license-v1-1 seen true | debconf-set-selections && \ DEBIAN_FRONTEND=noninteractive apt-get install -y --force-yes oracle-java7-installer oracle-java7-set-default && \ \ \ echo "===> clean up..." && \ rm -rf /var/cache/oracle-jdk7-installer && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* 

Dockerfile部分取自这里 。

您的磁盘空间确实已满,您可以使用df -kh命令检查该磁盘空间,或者有足够的磁盘空间,但是在inode之外,运行df -ih以确认(检查ifreeiused )。

这很可能是因为apt-get update所在的层被caching,并且变旧了。

因此,告诉docker再次运行apt-get update并放弃caching的apt-get update 。 只需在你的docker build命令中添加--no-cache

 docker build --no-cache .... 

或者,如果您正在使用docker-compose

 docker-compose build --no-cache ...