[英]Cannot (apt-get) install packages inside docker
我安装了 ubuntu 14.04 虚拟机并运行 docker(1.11.2)。 我尝试构建示例图像(此处)。
泊坞窗文件:
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
以下解决方案我尝试过,但没有成功。
如何查看详细的错误信息? 有什么方法可以解决这个问题?
您可能需要在 docker 内部更新 os
尝试先运行apt-get update
,然后apt-get install xxx
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/*
基于我遇到的类似问题,您希望同时查看可能的网络问题和可能的图像相关问题。
网络问题:您已经在查看与代理相关的内容。 确保由 docker 自动完成的 iptables 设置没有被您或其他应用程序无意中弄乱。 通常,如果另一个 docker 容器使用 net=host 选项运行,这可能会导致问题。
图像问题:您在容器中运行的发行版不是 Ubuntu 14.04,而是构建 java:8 的发行版。 如果您从 docker hub 上的官方库中获取了 java 图像,那么您将拥有最初来自 Debian jessie 的图像层次结构。 您可能希望查看此层次结构中的不同 Dockerfile,以找出 repo 设置不是您正在查看的位置。
对于这两种情况,要对此进行调试,我建议您在最新映像中运行一个 shell,以查看映像中的实际网络和存储库情况。 在你的情况下
docker run -ti --rm 64345sdd332 /bin/bash
在运行 install maven 命令之前为您提供一个 shell。
我目前在代理后面工作。 它无法下载某些依赖项。 为此,您必须在 docker 文件中提及代理配置。 参考
但是,现在我由于代理而面临运行"mvn", "dependency:resolve"
困难,maven 本身阻止下载一些依赖项并且构建失败。
感谢小伙伴们的大力支持!
在单个 RUN 指令中执行“apt-get update”和“apt-get install”。 这样做是为了确保安装最新的软件包。 如果 'apt-get install' 在单独的 RUN 指令中,那么它会重用由 'apt-get update' 添加的层,这可能是很久以前创建的。
RUN apt-get update && \
apt-get install -y <tool..eg: maven>
注意:RUN 指令通过在初始镜像之上添加层来构建镜像。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.