最近在研究一些网络相关的东西,发觉在公司安装了docker,但docker一直无法访问,进入容器网络也是出不到外网。
docker网络有三个方式,默认是桥接(bridge),也就是网络在不指定的情况下是桥接模式。由于公司(中大型)的网络一般都是到核心交换机或者汇聚交换机,再转发到防火墙(路由器)。
默认的情况下,在虚拟机中安装docker,按常规路由是:容器内部 -> 虚拟机-> 本地主机 -> 核心交换机 -> 路由器
默认情况下,docker桥接分配的子网是 172.17.0.0/16 ,网关是172.68.0.1,这里的网关就是虚拟机本机的,到这里我们不用管,查看虚拟机子网 172.17.0.0/16的路由,都是指向0.0.0.0,也就是虚拟机的默认网关,如下图所示:
它会从虚拟机的默认网关出去,也就是到192.168.1.1,但问题是中间(路由器或交换机)的设备根本就没有这个子网范围,于是就到不了真正的出口路由。
方法一:修改docker桥接网络配置
这个方法失败,本来想着修改docker桥接网络为192.168.1.0/24,跟路由一个网络,但这种方式直接导致虚拟机本机网络瘫痪
方法二:容器使用net的方式
这个不是最优但绝对是适合很多人的选择,在选择容器时,网络方式使用net的方式,如以下代码所示:
docker run -dit --net=host --name 测试 镜像
方法三:配置路由设备
这个方法是你可以管理该设备,使用静态路由可以解决该问题,或者划分子网等方式,主要解决路由问题便可以。