我安装了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
我尝试了以下解决方案,但没有成功。
如何查看详细的错误消息? 一个 有什么方法可以解决这个问题吗?
答案 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指令通过在初始图像之上添加层来构建图像。