Docker creates its own bridge, and when there is an existing bridge, it seems that the two collide. I have personally experienced that and multiple sources on the Internet mention about that problem. One solution I saw was making Docker use the existing bridge, and this one says that it is because Docker's rules are messing up with KVM's bridge, and provides the solution below.
My question is, why do those two bridge's configuration affect each other? Can't one have completely independent two bridges on one computer with one Ethernet card? That is, one bridge's setting does not affect the other bridge's network.
$ sudo systemctl edit docker.service
[Service]
ExecStartPre=/bin/sh -c “/usr/sbin/iptables -D FORWARD -p all -i br0 -j ACCEPT || true”
ExecStartPre=/usr/bin/iptables -A FORWARD -p all -i br0 -j ACCEPT
$ sudo reboot