问题描述
最近周一上班时,突然连不上公司内网,想到周末捣鼓过docker,判断很有可能是安装了docker引起的。我的系统是 ubuntu18.04, docker的版本如下:
通过 sudo ifconfig发现多了一个docker0的网卡,使用sudo ifconfig docker0 down 暂时关闭docker0的虚拟网卡后,果然又能访问内网了。但这个docker0为什么会影响我连公司网呢?
查阅了docker的官方文档及SO上的问答,我找到了原因。
当 Docker server 启动时,会在主机上创建一个名为 docker0 的虚拟网桥,如上图所示,通过宿主机上veth*的虚拟网卡和容器eth0网卡相连,由此实现容器和外部的网络通信。容器的ip和mac由宿主机生成,而默认docker0 默认的容器ip为172.17.0.1/16 ,问题就在这里。我们公司的DNS地址巧好也在 172.17.*.*这个网段,而被误认为是容器内部ip,从而通过docker0尝试访问容器,自然是访问不到的。
解决方案的话就是要区别容器ip和DNS地址,可以通过在 /etc/docker/daemon.json中添加如下配置
{
"bip": "172.31.0.1/16"
}
然后重启就ok了!