关于启动docker导致kvm虚拟机断网,因为主机创建了网桥br0,虚拟机的网卡是通过网桥出去的,可是为什么一启动docker会导致kvm虚拟机断网,要解释这个问题,需要先来了解一下docker的默认网络模式bridge:

当Docker server启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。接下来就要为容器分配IP了,Docker会从RFC1918所定义的私有IP网段中,选择一个和宿主机不同的IP地址和子网分配给docker0,连接到docker0的容器就从这个子网中选择一个未占用的IP使用。如一般Docker会使用172.17.0.0/16这个网段,并将172.17.42.1/16分配给docker0网桥(在主机上使用ifconfig命令是可以看到docker0的,可以认为它是网桥的管理接口,在宿主机上作为一块虚拟网卡使用)。单机环境下的网络拓扑如下,主机地址为10.10.101.105/24.
启动docker导致kvm虚拟机断网-LMLPHP
借用了网络上的配图.

因为docker的网桥是通过eth0出去,可是现有的网络环境是通过网桥br0出去,所以解决这个问题,应该在/etc/docker/daemon.json(没有这个文件,直接创建)加入和重启docker:
  1. {
  2. "bridge": "br0",
  3. "default-gateway": "192.168.80.1"<---主机的网关地址
  4. }
把docker桥接在br0上,这样就可以了.

以上的理解,只是大概看了一下,觉得问题应该是这样,没细想,也可能不正确,但不管怎样,问题解决.

暂时先这样,以后有问题再更新.

09-25 16:56