2017-05-30 163 views
3

如何安装/添加JDK 7中,我创建与Python泊坞窗图像作为基地,在我的Ubuntu 14.04的机器。我使用的Docker版本是1.12.3。图像中使用的Python的基本操作系统是Debian。我的Docker镜像中还需要JAVA 7(JDK 7)。其中几乎没有Python脚本,也很少需要JDK的脚本。在泊坞窗集装箱

我能得到JDK 7中我的形象,但是从过去的几天里它停止工作。它抛出错误,oracle-jdk-7软件包不再可用。然后我试图摆脱Dockerhub JDK 7 Dockerfile内容和我的dockerfile添加这些行。它工作了几次,然后开始抛出空间不足的错误。

但空间不是一个问题,因为“/无功”只有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 

这会引发很少包缺失的错误。

请帮我在我的docker镜像中获得jdk 7。任何JDK类型都可以。 Oracle JDK或打开jdk。

在此先感谢。

+0

谁抱怨空间满了吗? – Robert

+0

错误处理tar文件(退出状态1):MKDIR的/ usr /共享/图标/高彩色/ 24×24:设备上没有剩余空间 – Raji

回答

5

环境中包含一个代理定义

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

与所有流量外面被路由到一个不存在的位置。删除这些行,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/* 

构建:

$ docker build -t t . 

它建在以下后的结果:

$ 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只需exchan通过以下代码在dockerfile中安装jdk的代码。另外请注意,我宁愿将两个不同的jdks保存在不同的Docker容器中。这是更好的方式,从不同的图像引用所需的Java版本,只是名字,他们有内容后您的构建,如:搬运工建立-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被部分从here拍摄。

+0

在此问题中Dockerfile中使用的代理是虚拟代理。我在我的文件中使用了正确的代理。因为这是我的工作场所的代理人,所以我没有在这里透露。我使用的代理工作正常。 – Raji

+0

你提供的Dockerfile工作正常。它在Docker镜像中安装Oracle-java-8。有没有jdk-7的选项?我知道何时出现版本8,即使版本7不存在,它也能正常工作。但如果具体我正在寻找JDK 7,它不可用。要么它给404错误或空间满。 – Raji

+0

Oracle已经从公共访问中删除了jdk7。您需要一个oracle.com帐户才能从oracle访问这些较旧的版本。 http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html – ferdy

0

无论你的磁盘空间真是充满,可以检查与df -kh命令或有足够的磁盘空间,但超出了i节点的运行df -ih确认(检查ifree- 稠)。

+0

文件系统信息节点 - 稠IFree IUSE%上 的/ dev /映射器/ vglocal-VAR安装245K 139K 106K 57 %/ var – Raji

+0

在运行docker build命令时,它从31%填充到57%,然后失败,出现无空间的错误 – Raji

0

很可能这是因为apt-get update完成的图层被缓存,并且变旧。

因此,请告诉码头再次运行apt-get update并放弃缓存的码头。只需添加--no-cachedocker build命令:

docker build --no-cache .... 

或者,如果您使用的是docker-compose

docker-compose build --no-cache ... 
+0

使用--no-cache,它给出以下错误: Err http://ppa.launchpad.net jessie/main amd64软件包 404 Not Found Get:3 http://deb.debian.org jessie/main amd64软件包[9065 kB] W:无法获取http://ppa.launchpad.net/webupd8team/java/ubuntu/dists/jessie/main/binary-amd64/Packages 404 Not Found E:某些索引文件失败去下载。他们已被忽略,或旧的使用。 – Raji