docker容器中的apt-get无法自动安装依赖是怎么回事

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker容器中的apt-get无法自动安装依赖是怎么回事相关的知识,希望对你有一定的参考价值。

来源为网易蜂巢的Ubuntu镜像,uname信息为:
Linux 524d88101d4e 3.13.0-86-generic #130-Ubuntu SMP Mon Apr 18 18:27:15 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

以root权限登录,发现apt-get在安装某些程序时无法自动安装依赖。比如apt-get install nginx就可以正常安装,但是安装perl就会出现这个问题:

会显示perl缺乏依赖,可是当我手动安装依赖perl-base时:

则会显示perl-base已经安装好且是最新版本。再安装perl依然提示依赖不全。

请问这是什么原因呢?

注:apt-get用的是网易的源,且每次安装之前都进行了apt-get update
参考技术A 曹丕篡汉,夷陵之战曹丕当权后,折服了前来争王位的曹彰。又欲害曹植,逼其作诗。曹植七步成诗感动曹丕。刘备义子刘封因不曾发兵救关羽,刘备借故处死。[1]

Docker 容器无法访问 DNS 但无法解析主机

【中文标题】Docker 容器无法访问 DNS 但无法解析主机【英文标题】:Docker container can reach DNS but not resolve hosts 【发布时间】:2015-05-29 18:24:24 【问题描述】:

我在运行 docker 容器时遇到了一个有趣的问题:出乎意料的是,我无法从容器内解析 DNS。

这里有一个纲要:

    什么都没有解决; apt-get、pip、一次性 ping 容器等。运行 docker run -it --dns=8.8.8.8 ubuntu ping www.google.com 会导致带有和不带有 --dns 标志的 ping: unknown host www.google.com

    我可以从容器内部和外部到达 8.8.8.8。 docker run -it ubuntu ping 8.8.8.8 有效。

    我已将容器配置为同时使用 8.8.8.8、8.8.8.4 和我的本地网络 DNS 服务器(以各种排列方式),方法是编辑 /etc/sysconfig/docker 以添加 DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.8.4" 并设置 @运行时容器上的 987654331@ 标志。 systemctl restart docker 在每次更改之间运行。

    ip_forward 已启用。 (见here)

    我已经按照here 的规定进行了完全重置。

我正在运行 Fedora 21,docker 客户端版本 1.5.0。

有什么想法吗?我完全不知道是什么阻止了 docker 成功访问 Internet。

【问题讨论】:

也许你应该在 docker 问题跟踪器中打开一个问题; github.com/docker/docker/issues。这样做时,请包括此处github.com/docker/docker/blob/master/CONTRIBUTING.md 中解释的相关信息 这里与 Fedora 22 相同。 【参考方案1】:

您可以在 docker 映像中安装 dig 之类的工具来解决问题。

在你的/etc/hosts 文件中使用静态主机,让 apt-get 在 docker 镜像中运行。将这些行添加到您的主机文件中:

213.32.5.7 debian.mirrors.ovh.net
141.76.2.4 ftp.de.debian.org 
217.196.149.233 mirror-conova-security.debian.org
212.211.132.250 lobos.debian.org
212.211.132.250 security.debian.org 
5.153.231.4  http.debian.net 
151.101.12.204 cdn-fastly.deb.debian.org
151.101.12.204 security-cdn.debian.org

【讨论】:

【参考方案2】:

他们在 1.8 中解决了这个问题:https://github.com/docker/docker/issues/13381 Cheers。

【讨论】:

你能链接到后代的修复吗? 是的,重新找到链接很痛苦,哈哈。我真的需要开始跟踪我的问题的问答以供参考。【参考方案3】:

在这一切之后,完全重启解决了这个问题 - 虽然,这仍然不能回答它是什么。

如果有人知道真正的原因是什么,我仍然很好奇,但现在问题已经消失了。

【讨论】:

我反复遇到这个问题,重启有帮助,但不能解决问题。问题不仅仅出现在 ubuntu 映像上,而是我尝试过的所有问题。

以上是关于docker容器中的apt-get无法自动安装依赖是怎么回事的主要内容,如果未能解决你的问题,请参考以下文章

为什么我的作曲家依赖项没有在docker容器中找到但是本机在我的mac上?

Docker构建“无法解析'archive.ubuntu.com'”apt-get无法安装任何东西

apt-get 安装没有自动依赖

Docker python无法导入通过apt-get安装的模块

Docker构建“无法解析'archive.ubuntu.com'”apt-get无法安装任何东西

Docker容器中安装新的程序