无法在Docker容器中安装包

以下是我的系统中的一些docker图片:

root@labadmin-VirtualBox:/home/labadmin# docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu 14.04 1e0c3dd64ccd 13 days ago 187.9 MB ubuntu latest 45bc58500fa3 5 weeks ago 126.9 MB 

我想在容器中安装“smartmontools”。 但它是抛出一个错误“无法find包smartmontools”如下所示:

 root@labadmin-VirtualBox:/home/labadmin# docker run -it 1e0c3dd64ccd root@b4954826a227:/# apt-get install smartmontools Reading package lists... Done Building dependency tree Reading state information... Done E: Unable to locate package smartmontools root@b4954826a227:/# exit exit 

但是,当我在Ubuntu机器上做同样的工作。

 root@labadmin-VirtualBox:/home/labadmin# apt-get install smartmontools Reading package lists... Done Building dependency tree Reading state information... Done ***smartmontools is already the newest version.*** 0 upgraded, 0 newly installed, 0 to remove and 542 not upgraded. root@labadmin-VirtualBox:/home/labadmin# 

Ubuntu容器和Ubuntu系统有什么不同? 什么是阻止包安装在容器中?

我的要求是创build一个容器与Ubuntu操作系统的一些实用工具作为基本的形象:

 FROM ubuntu:14.04 RUN apt-get update && apt-get install -y smartmontools 

当通过手动运行容器进行testing时,不要更新apt-get update的高速caching,因此Unable to locate package错误

但是你的Dockerfile例子应该可以工作

以下程序帮助我解决了这个问题:

 root@labadmin-VirtualBox:/home/labadmin# docker run busybox ping -c 2 192.203.230.10 PING 192.203.230.10 (192.203.230.10): 56 data bytes 64 bytes from 192.203.230.10: seq=0 ttl=56 time=66.724 ms 64 bytes from 192.203.230.10: seq=1 ttl=56 time=54.786 ms --- 192.203.230.10 ping statistics --- 2 packets transmitted, 2 packets received, 0% packet loss round-trip min/avg/max = 45.815/56.947/66.724 ms 

当您尝试使用容器ping到google.com时,由于DNS问题而无法访问。

 root@labadmin-VirtualBox:/home/labadmin# docker run busybox nslookup google.com Server: 8.8.8.8 Address 1: 8.8.8.8 nslookup: can't resolve 'google.com' 

找出您的机器中使用的DNS服务器:

 root@labadmin-VirtualBox:/home/labadmin# nm-tool |grep DNS DNS: 172.24.100.50 DNS: 10.1.100.50 

通过添加DNS IP执行相同的操作:

 root@labadmin-VirtualBox:/home/labadmin# docker run --dns 172.24.100.50 busybox nslookup google.com Server: 172.24.100.50 Address 1: 172.24.100.50 indc01.radisys.com Name: google.com Address 1: 2607:f8b0:4009:80c::200e ord36s01-in-x0e.1e100.net Address 2: 172.217.4.110 ord36s04-in-f14.1e100.net 

要解决这个问题,请将以下内容永久添加到新文件中:

 root@labadmin-VirtualBox:/home/labadmin# cat /etc/docker/daemon.json { "dns" : ["172.24.100.50", "8.8.8.8"] } 

有关Docker DNSconfiguration的更多信息: https : //docs.docker.com/engine/userguide/networking/configure-dns/

重新启动docker服务:

 root@labadmin-VirtualBox:/home/labadmin# sudo service docker restart docker stop/waiting docker start/running, process 22291 root@labadmin-VirtualBox:/home/labadmin# docker run busybox nslookup google.com Server: 172.24.100.50 Address 1: 172.24.100.50 indc01.radisys.com Name: google.com Address 1: 2607:f8b0:4009:801::200e ord30s31-in-x0e.1e100.net Address 2: 172.217.4.238 ord30s31-in-f14.1e100.net 

通过运行容器检查它:

 root@labadmin-VirtualBox:/home/labadmin# docker run -it e02e811dd08f / # ping google.com PING google.com (172.217.4.238): 56 data bytes 64 bytes from 172.217.4.238: seq=0 ttl=47 time=251.506 ms 64 bytes from 172.217.4.238: seq=1 ttl=47 time=245.621 ms ^C --- google.com ping statistics --- 2 packets transmitted, 2 packets received, 0% packet loss round-trip min/avg/max = 245.621/257.113/272.586 ms / # 

欲了解更多信息: https : //robinwinslow.uk/2016/06/23/fix-docker-networking-dns/