首先我的宿主机是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规则
[root@docker2 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服务
[root@docker2 ~]# service docker restart
2启动容器
[root@docker2 ~]# docker start mymysql
上面的mymysql是我的容器名,具体的大家根据自己容器名修改
3进入容器中
[root@docker2 ~]# docker exec -it mymysql /bin/bash
root@15e658240225:/#
4使用apt安装ifconfig等网络工具,惊喜发现可以连上外网了
root@15e658240225:/# apt-get update
root@15e658240225:/# apt install net-tools # ifconfig
root@15e658240225:/# apt install iputils-ping # ping
采用上面命令分别安装ifconfig和ping工具
5在容器里面测试工具
root@15e658240225:/# 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