天天看點

docker容器不能通路外網問題以及ubuntu環境下docker容器如何安裝ifconfig ping等網絡工具

首先我的主控端是centos7系統,然後上面跑了一個mysql的docker容器,今天好奇想進去容器裡面去看下容器的ip位址,結果發現ifconfig指令沒有,想測試能不能連外網,居然ping指令也沒有,我試圖用apt指令安裝這些工具,發現根本連不上網絡。

我在主控端中檢視網絡配置檔案

vi /etc/sysconfig/network-scripts/ifcfg-ens192
           

發現是DNS沒有配置的原因,然後改完DNS後重新開機主控端網絡之後,主控端是可以通路外網了,但是再用docker exec -it mymysql /bin/bash進去容器,發現還是連不上網,後來上網查了一些資料,終于解決了問題:

注意,大家在使用docker的時候最好把主控端的防火牆關了service iptables stop,因為建立容器的時候預設會在防火牆裡面添加了docker規則

[[email protected] sysconfig]# iptables -t nat -L -n
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
DOCKER     all  --  0.0.0.0/0            0.0.0.0/0            ADDRTYPE match dst-type LOCAL

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
DOCKER     all  --  0.0.0.0/0           !127.0.0.0/8          ADDRTYPE match dst-type LOCAL

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
MASQUERADE  all  --  172.17.0.0/16        0.0.0.0/0           
MASQUERADE  tcp  --  172.17.0.2           172.17.0.2           tcp dpt:3306

Chain DOCKER (2 references)
target     prot opt source               destination         
RETURN     all  --  0.0.0.0/0            0.0.0.0/0           
DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:3306 to:172.17.0.2:3306
           

可以看到預設docker 172.17.0.0/16這個位址段的資料包是不能通路外部網絡的

1重新開機docker服務

[[email protected] ~]# service docker restart
           

2啟動容器

[[email protected] ~]# docker start mymysql
           

上面的mymysql是我的容器名,具體的大家根據自己容器名修改

3進入容器中

[[email protected] ~]# docker  exec -it mymysql /bin/bash
[email protected]:/# 
           

4使用apt安裝ifconfig等網絡工具,驚喜發現可以連上外網了

[email protected]:/# apt-get update

[email protected]:/# apt install net-tools       # ifconfig 

[email protected]:/# apt install iputils-ping     # ping
           

采用上面指令分别安裝ifconfig和ping工具

5在容器裡面測試工具

[email protected]:/# ifconfig 
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)
        RX packets 7295  bytes 11187896 (10.6 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 4392  bytes 349904 (341.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0