繁体   English   中英

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

[英]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

在此处输入图片说明

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

  1. 在这里重新启动docker

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

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

您可能需要在 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM