如何 Install/add jdk 7 in Docker 容器
How to Install/add jdk 7 in Docker Container
我在我的 Ubuntu 14.04 机器上创建了一个 docker 图像,其中 Python 作为基础。 Docker 我使用的版本是1.12.3。图像中使用的 OS of Python 是 Debian。我还需要 JAVA 7 (JDK 7) 在我的 docker 图像中。里面有很少的 Python 脚本,也很少有需要 JDK 的脚本。
我能够在我的图像中得到 JDK 7,但从过去几天开始它停止工作了。 oracle-jdk-7 包不再可用是抛出错误。然后我尝试从 Dockerhub 获取 JDK 7 Docker 文件内容,并将这些行添加到我的 docker 文件中。它工作了几次,然后开始抛出 space 不够的错误。
但是 space 不是问题,因为 '/var' 只占用了 29%。以下是我的Docker文件内容。
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/*
这会引发 space 已满的错误。我看到 '/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。
提前致谢。
要么你的磁盘 space 真的满了,你可以用 df -kh
命令检查或者有足够的磁盘 space,但是没有 inode,运行 df -ih
确认(检查 ifree 或 iused)。
您的环境包含代理定义
ENV http_proxy http://http.proxy.abc.com:8000
ENV https_proxy http://http.proxy.abc.com:8000
这样一来,所有到外部的流量都被路由到一个不存在的位置。删除这些行,docker 将能够检索 apt 资源。
除此之外,我将在此处为您提供完整的 docker 文件:
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 只需交换在 docker 文件中安装 jdk 的代码下列。另请注意,我更愿意将两个不同的 jdk 放在不同的 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 部分取自 here。
这很可能是因为 apt-get update
完成的图层被缓存,并且变旧了。
因此,再次告诉 docker 到 运行 apt-get update
并丢弃缓存的那个。只需将 --no-cache
添加到您的 docker build
命令:
docker build --no-cache ....
或者,如果您使用的是 docker-compose
:
docker-compose build --no-cache ...
我在我的 Ubuntu 14.04 机器上创建了一个 docker 图像,其中 Python 作为基础。 Docker 我使用的版本是1.12.3。图像中使用的 OS of Python 是 Debian。我还需要 JAVA 7 (JDK 7) 在我的 docker 图像中。里面有很少的 Python 脚本,也很少有需要 JDK 的脚本。
我能够在我的图像中得到 JDK 7,但从过去几天开始它停止工作了。 oracle-jdk-7 包不再可用是抛出错误。然后我尝试从 Dockerhub 获取 JDK 7 Docker 文件内容,并将这些行添加到我的 docker 文件中。它工作了几次,然后开始抛出 space 不够的错误。
但是 space 不是问题,因为 '/var' 只占用了 29%。以下是我的Docker文件内容。
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/*
这会引发 space 已满的错误。我看到 '/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。
提前致谢。
要么你的磁盘 space 真的满了,你可以用 df -kh
命令检查或者有足够的磁盘 space,但是没有 inode,运行 df -ih
确认(检查 ifree 或 iused)。
您的环境包含代理定义
ENV http_proxy http://http.proxy.abc.com:8000
ENV https_proxy http://http.proxy.abc.com:8000
这样一来,所有到外部的流量都被路由到一个不存在的位置。删除这些行,docker 将能够检索 apt 资源。
除此之外,我将在此处为您提供完整的 docker 文件:
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 只需交换在 docker 文件中安装 jdk 的代码下列。另请注意,我更愿意将两个不同的 jdk 放在不同的 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 部分取自 here。
这很可能是因为 apt-get update
完成的图层被缓存,并且变旧了。
因此,再次告诉 docker 到 运行 apt-get update
并丢弃缓存的那个。只需将 --no-cache
添加到您的 docker build
命令:
docker build --no-cache ....
或者,如果您使用的是 docker-compose
:
docker-compose build --no-cache ...