利用Dockerfile构建镜像时无法从互联网下载package的问题解决方法

解决Dockerfile在Ubuntu虚拟机中无法联网下载package问题
在macOS的Parallels Desktop运行的Ubuntu虚拟机上,构建Docker镜像时遇到apt-get更新或安装package失败。问题源于DNS配置。解决方案包括:1) 查看macOS的DNS服务器地址;2) 在Ubuntu虚拟机的Docker配置文件中添加主机的DNS地址,取消DOCKER_OPTS注释;3) 使用命令使Docker配置生效,确保启动时使用新DNS设置。

运行环境:macOS,利用parallels Desktop在macOS上运行ubuntu16.04虚拟机,在该虚拟机上运行Docker。

问题介绍:想利用Dockerfile构建一个带有vim的ubuntu镜像时,发现使用apt-get update 或apt-get install 命令时,报如下错误:


             尝试进行更换下载源,问题依然存在,考虑是网络连通性问题。依据前一个解决容器里无法联网问
             题的经验,初步断定是由于DNS地址的设置问题,查阅相关资料发现由于某些学校,企业要求访问其指定的私有DNS服务             器或者所在网络封锁了谷歌8.8.8.8的DNS服务器的访问,导致Docker daemon无法连接互联网并从网上下载安装包。所               以我们要做的事在启动Docker daemon 时为它指定一个指向该私有DNS服务器的地址。

            首先在主机,本环境中即macOS中查看DNS服务器地址,可使用命令

cat /etc/resolv.conf

              然后在虚拟机ubuntu中使用编辑docker daemon的默认配置

xxxxxx@ubuntu ~ $ cat /etc/default/docker
... ...
CKER_OPTS to modify the daemon startup options. DOCKER_
# Use D OOPTS="--dns xx.xx.xx.xx --dns xx.xx.xx.xx --dns 8.8.8.8"
...

               即取消DOCKER_OPTS这一行的注释并在其后加入我们刚刚在主机中查看到的DNS服务器地址。

               注意在该配置文件的注释中我们发现,当使用 service docker restart 命令时,并不会运行这个配置文件,即目前该修                   改无效,使用如下命令,使得重新运行docker时能让我们的配置生效。

xxxxx@ubuntu:~$ sudo mkdir -p /etc/systemd/system/docker.service.d
xxxxx@ubuntu:~$ sudo vi /etc/systemd/system/docker.service.d/Using_Environment_File.conf
[Service]
e is sufficient if DOCKER_OPTS variable does not have to be expanded: #Environm
# This li nentFile=-/etc/default/docker # Use this line to expand DOCKER_OPTS variable:
nt DOCKER_OPTS=\"$DOCKER_OPTS\"" ExecStart= ExecStart=/usr/bin/dockerd -H fd:// $DOCKER_OPTS
ExecStartPre=/bin/sh -c ". /etc/default/docker && /bin/systemctl set-environm
e
         重启docker
systemctl daemon-reload
service docker restart
       重新执行docker build命令,成功。

                       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值