无法(apt-get)在docker中安装软件包

时间:2016-07-04 08:04:41

标签: maven docker apt-get

我安装了ubuntu 14.04虚拟机并运行docker(1.11.2)。我尝试构建示例图像(here)。

docker file:

FROM java:8 

# Install maven
RUN apt-get update  
RUN apt-get install -y maven
....

我收到以下错误:

Step 3: RUN apt-get update
 --> Using cache
 --->64345sdd332
Step 4: RUN apt-get install -y maven
 ---> Running in a6c1d5d54b7a
Reading package lists...
Reading dependency tree...
Reading state information...
E: Unable to locate package maven
INFO[0029] The command [/bin/sh -c apt-get install -y maven] returned a non-zero code:100

enter image description here

我尝试了以下解决方案,但没有成功。

  
      
  1. 重新启动了泊坞窗here

  2.   
  3. apt-get -qq -y install curl here运行:同样的错误:(

  4.   

如何查看详细的错误消息? 一个 有什么方法可以解决这个问题吗?

5 个答案:

答案 0 :(得分:6)

您可能需要在

之前更新docker内的操作系统

首先尝试apt-get update,然后apt-get install xxx

答案 1 :(得分:2)

apt-get update的缓存结果可能非常陈旧。根据Docker最佳实践重新设计包拉:

FROM java:8 

# Install maven
RUN apt-get update \
 && DEBIAN_FRONTEND=noninteractive \
    apt-get install -y maven \
 && apt-get clean \
 && rm -rf /var/lib/apt/lists/*  

答案 2 :(得分:1)

根据我遇到的类似问题,您希望同时查看可能的网络问题和可能的图像相关问题。

  • 网络问题:您已经在查看与代理相关的内容了。确保docker自动完成的iptables设置没有被你自己或其他应用程序无意中弄乱。通常,如果另一个docker容器使用net = host选项运行,则可能会导致问题。

  • 图像问题:您在容器中运行的发行版不是Ubuntu 14.04,而是构建java:8的发行版。如果您从docker hub上的官方库中获取了java映像,那么您将拥有最初来自Debian jessie的图像层次结构。您可能希望查看此层次结构中的不同Dockerfile,以找出repo设置不在您正在查看的位置。

对于这两种情况,为了调试这个,我建议您在最新的图像内部运行一个shell来查看图像中的实际网络和repo情况。在你的情况下

docker run -ti --rm 64345sdd332 /bin/bash

在运行install maven命令之前为您提供一个shell。

答案 3 :(得分:0)

我目前正在代理工作。它无法下载一些依赖项。为此你必须在docker文件中提到代理配置。 ref

但是,由于代理,我现在面临运行"mvn", "dependency:resolve"的困难,maven本身阻止下载一些依赖项并且构建失败。

感谢各位朋友的大力支持!

答案 4 :(得分:0)

在一条RUN指令中执行“ apt-get更新”和“ apt-get安装”。这样做是为了确保将安装最新的软件包。如果“ apt-get install”位于单独的RUN指令中,则它将重用“ apt-get update”添加的层,该层可能是很久以前创建的。

RUN apt-get update && \
    apt-get install -y <tool..eg: maven>

注意:RUN指令通过在初始图像之上添加层来构建图像。