Docker安装Java7失败。

32

我想通过ppa(运行 add-apt-repository ppa:webupd8team/java -y)在我的Docker镜像中安装Java7,但是出现了以下错误:

returned a non-zero code: 127

以下是安装正确但无法正常工作的建议方法,我已经尝试了两个ppa源。
RUN  apt-get install python-software-properties -y
RUN  add-apt-repository ppa:webupd8team/java -y
#RUN add-apt-repository ppa:eugenesan/java -y
RUN apt-get update
RUN  apt-get install oracle-java7-installer -y

以下是日志输出:

Step 28 : RUN  add-apt-repository ppa:webupd8team/java -y
 ---> Running in b278761a4209
 [91m/bin/sh: 1: add-apt-repository: not found
 [0m 

所以...我需要找出这个命令是否存在于帮助库中:

add-apt-repository

add-apt-repository似乎是python-software-properties安装程序的一部分。我在这一步骤中并没有看到任何真正的错误,除了在构建的其他区域弹出的这些消息。因此,我假设如果我能解决这个问题,上述的python步骤将会按需要安装:

    [91mdebconf: unable to initialize frontend: Dialog
     debconf: (TERM is not set, so the dialog frontend is not usable.)
     debconf: falling back to frontend: Readline
     [0m[91mdebconf: unable to initialize frontend: Readline
     debconf: (This frontend requires a controlling tty.)
     debconf: falling back to frontend: Teletype
     [0m[91mdpkg-preconfigure: unable to re-open stdin: 

那么,如何设置术语或对话框?我认为-y选项可以实现此功能。

3个回答

53

你在apt-get install命令中的-y是告诉apt-get“假设是的”,这并不同于以非交互模式运行。

你看到的“无法初始化前端对话框”消息是因为Debian正在以交互模式运行apt-get。要告诉它以非交互模式运行,请在Dockerfile的开头添加此行:

ENV DEBIAN_FRONTEND noninteractive

现在你的命令将以非交互模式运行,因此apt-get不会尝试弹出任何对话框。

至于你实际的错误,你是正确的,add-apt-repositorypython-software-properties的一部分。尝试将apt-get update -y命令放在apt-get install python-software-properties命令之前。

RUN apt-get update -y                             && \
    apt-get install python-software-properties -y && \
    add-apt-repository ppa:webupd8team/java -y    && \
    apt-get update -y                             && \
    apt-get install oracle-java7-installer -y     && \
    oracle-java7-set-default

请注意,您需要执行两个apt-get update -y命令,一个在开始之前(养成好习惯),另一个是在添加Oracle Java PPA后。

apt-get手册

Docker ENV文档


别担心 - 尽情享受 Docker! - Chris McKinnel
是的,到目前为止我很喜欢它。我已经向一些同行展示了它,他们也很喜欢。如果我能完成这个尝试,它可能会取代我们当前的虚拟机解决方案。 - Will Lopez
我发现我还需要从http://askubuntu.com/a/190674中获取以下两行代码: RUN echo debconf shared/accepted-oracle-license-v1-1 select true | debconf-set-selections RUN echo debconf shared/accepted-oracle-license-v1-1 seen true | debconf-set-selections - michielbdejong

14

add-apt-repository命令是软件包software-properties-common的一部分。请安装software-properties-common,而不是python-software-properties。

然后您可以添加ppa:webupd8team存储库。但仍然存在一个问题。

设置accepted-oracle-license-v1-1并安装java。以下示例Dockerfile将完美地工作。

FROM ubuntu:14.04

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

1
被接受的答案并没有解决这个确切的问题。我很高兴尝试了你的解决方案。它非常有效。 - codenaugh
对我来说,安装 software-properties-common 没有起作用,但是从上面的答案中安装 python-software-properties 起了作用。 - markus_p
请为我工作:echo password | mysqlrouter --bootstrap xxxxxxxxxx - Kandy

4

方法一

有人说这种方法不起作用,但我测试后发现它可行。

ENV DEBIAN_FRONTEND noninteractive

yes | apt-get install package-1 package-2

方法二

ENV DEBIAN_FRONTEND noninteractive

apt-get install -y package-1 package-2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接