首先我的主控端是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