当前位置: 首页 > 面试题库 >

Dockerfile:Docker构建无法下载软件包:centos-> yum,debian / ubuntu-> apt-get进入内部网

子车心思
2023-03-14
问题内容

问题:任何使用Dockerfile取决于centos,ubuntu或debian的构建都无法构建。

环境:我有一台Mac OS X,运行带有来宾Ubuntu 14.04的VMWare,运行Docker:

mdesales@ubuntu ~ $ sudo docker version
Client version: 1.1.2
Client API version: 1.13
Go version (client): go1.2.1
Git commit (client): d84a070
Server version: 1.1.2
Server API version: 1.13
Go version (server): go1.2.1
Git commit (server): d84a070

行为:使用“ docker
build”无法下载软件包。这里有这样Dockerfile的例子:https://github.com/Krijger/docker-
cookbooks/blob/master/jdk8-oracle/Dockerfile
,https://github.com/ottenhoff/centos-
java/blob/master/Dockerfile

我知道我们可以使用–dns运行容器,但这是在构建期间。

  • centos

从centos运行yum安装abc

  • ubuntu

从ubuntu RUN apt-get install abc

用户报告说,这可能是DNS配置问题,其他人则认为该配置已注释掉Google的DNS服务器。

Step 2 : RUN yum install -y curl; yum upgrade -y; yum update -y;  yum clean all
 ---> Running in 5f11b65c87b8
Loaded plugins: fastestmirror
Couldn't resolve host 'mirrorlist.centos.org

问题仍然存在…因此,#docker @ Freenode上的大多数用户都提到这可能是DNS配置问题…所以这是我的Ubuntu:

$ sudo cat /etc/resolv.conf 
nameserver 127.0.1.1
search localdomain

我试图改变那个,同样的问题…


问题答案:

问题

与#docker @ freenode上的一些开发人员交谈时,每个人都清楚这个问题:DNS和环境。在家里的常规Internet连接上,该构建工作正常。

解:

在具有专用DNS服务器的环境中,或者网络阻止Google的DNS服务器时,会发生此问题。即使docker容器可以ping
8.8.8.8,构建仍需要访问防火墙或数据中心后面的同一私有DNS服务器。

使用–dns开关启动Docker守护程序,以指向您的私有DNS服务器,就像配置了主机OS​​一样。这是通过反复试验发现的。

细节

我的MAC OS X(主机OS)在/etc/resolv.conf中配置了另一个DNS:

mdesales@Marcello-Work ~ (mac) $ cat /etc/resolv.conf
search corp.my-private-company.net
nameserver 172.18.20.13
nameserver 172.20.100.29

我的主机可能在构建时将数据包丢弃到Google的IP地址8.8.8.8。我只是将这两个IP地址放在Ubuntu的docker守护程序配置下:

mdesales@ubuntu ~ $ cat /etc/default/docker
...
...
# Use DOCKER_OPTS to modify the daemon startup options.
DOCKER_OPTS="--dns 172.18.20.13 --dns 172.20.100.29 --dns 8.8.8.8"
...

现在该版本可以按预期工作!

$ sudo ./build.sh 
Sending build context to Docker daemon 7.168 kB
Sending build context to Docker daemon 
Step 0 : FROM centos
 ---> b157b77b1a65
Step 1 : MAINTAINER Marcello_deSales@intuit.com
 ---> Running in 49bc6e233e4c
 ---> 2a380810ffda
Removing intermediate container 49bc6e233e4c
Step 2 : RUN yum install -y curl; yum upgrade -y; yum update -y;  yum clean all
 ---> Running in 5f11b65c87b8
Loaded plugins: fastestmirror
Determining fastest mirrors
 * base: mirror.supremebytes.com
 * extras: centos.mirror.ndchost.com
 * updates: mirrors.tummy.com
Resolving Dependencies
--> Running transaction check
---> Package systemd.x86_64 0:208-11.el7 will be updated
---> Package systemd.x86_64 0:208-11.el7_0.2 will be an update
---> Package systemd-libs.x86_64 0:208-11.el7 will be updated
---> Package systemd-libs.x86_64 0:208-11.el7_0.2 will be an update
--> Finished Dependency Resolution

感谢@BrianF和其他在IRC频道中提供帮助的人!

永久性VM解决方案-2015年7月2日更新

现在,我们将GitHub Enterprise和CoreOS Enterprise Docker
Registry混在一起使用…因此,对我来说,从HOST机器添加公司DNS服务器以使VM也能正常工作非常重要。

用主机的/etc/resolv.conf替换来宾OS中的/etc/resolv.conf也解决了该问题!Docker 1.7.0版。我刚刚在VMWareFusion上使用Ubuntu 15.04创建了一个新的VM,再次遇到这个问题…

/etc/resolv.conf之前

~/dev/github/public/stackedit on ⭠ master ⌚ 20:31:02
$ cat /etc/resolv.conf 
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 127.0.1.1
search localdomain

/etc/resolv.conf之后*

~/dev/github/public/stackedit on ⭠ master ⌚ 20:56:09
$ cat /etc/resolv.conf 
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
search corp.mycompany.net
nameserver 10.180.194.35
nameserver 10.180.194.36
nameserver 192.168.1.1


 类似资料:
  • 我安装了ubuntu 14.04虚拟机并运行docker(1.11.2)。我尝试构建示例映像(这里)。 Docker文件: 我发现以下错误: 我尝试过以下解决方案,但没有成功。 > 我是码头工人 以apt get-qq-y安装curl运行:相同错误:( 如何查看详细的错误消息?a有办法解决这个问题吗?

  • apt-get Ubuntu 系统软件包管理器 apt-get 命令是 Debian Linux 发行版中的 APT 软件包管理工具。所有基于 Debian 的发行都使用这个包管理系统。 apt-get install xxx #安装软件 apt-get remove xxx ##删除软件 apt-get purge xxx #删除软件并删除配置文件 apt-get autoremove x

  • 本文向大家介绍Docker 安装Debian / Ubuntu软件包,包括了Docker 安装Debian / Ubuntu软件包的使用技巧和注意事项,需要的朋友参考一下 示例 在单个运行命令上运行安装以合并更新和安装。如果以后添加更多软件包,它将再次运行更新并安装所有需要的软件包。如果更新是单独运行的,它将被缓存,并且软件包安装可能会失败。脚本安装需要将前端设置为非交互式,并传递-y来安装。在安

  • 我对docker相当陌生,正试图通过写自己的图像来学习,目前,正在阅读docker in action(ISBN:1633430235) 我的代码: 图书代码: 然而,在这两个代码中,我都得到了一个无法定位的包eror和一个none-zeero代码: apt-get update'返回一个非零代码:100 这将成功地下载,但一旦它开始安装git,我得到同样的错误。这个 3)在https://doc

  • 问题内容: 我一直在尝试在以前可以使用的各种文件上运行Docker构建,现在不再使用了。 一旦Docker文件包含要安装软件的任何行,它将失败并显示一条消息,指出未找到该软件包。 日志中显示的常见消息是 知道为什么不安装任何软件吗? 问题答案: 经过很多头痛后,我找到了答案。可以通过进行以下更改来修复: 取消注释以下行 重新启动Docker服务 删除所有已缓存无效DNS设置的图像。 重新构建,问题

  • 本文向大家介绍Ubuntu下apt-get/apt命令的介绍与使用,包括了Ubuntu下apt-get/apt命令的介绍与使用的使用技巧和注意事项,需要的朋友参考一下 前言 本文主要给大家介绍了关于Ubuntu下apt-get/apt命令的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。 命令详解: 用法:apt-get [选项] 命令    apt-get [选项] i