为什么docker 网段冲突会和宿主机冲突?原因分析和解决方案

seo 优化:

  • 为什么docker-compose 网段冲突会和宿主机冲突?但是直接使用 docker 不会冲突?
  • docker网段冲突了怎么办?
  • docker默认网段和主机网段冲突解决
  • 本来好好的,新开了一个容器之后,突然无法登录虚拟机(宿主机),好像是 docker 网段冲突怎么办?

回答这个问题前,建议先看下面两篇文章:
docker0 和 br-xxxxxx 有什么区别?
为什么 docker-compose 创建的网络模式为什么不在 docker 四大类型中?

私网地址是: A类地址:10.0.0.0~10.255.255.255. B类地址:172.16.0.0 ~172.31.255.255. C类地址:192.168.0.0~192.168.255.255

原因分析:

docker 的虚拟网卡网段使用的是『B类地址』

如果是个人电脑,我们宿主机一般都是 192.168.xxx.xxx

所以,默认情况下,一切相安无事。

所以,如果你遇到冲突,一般是这样:一切都好好的,但是突然,无法登录主机了,连 ping 都 ping 不通

为什么呢?很简单,172 开头的网段被用完了,docker 就去侵犯 192.168 了

但是我们的宿主机用的网段就是 192.168,所以网段冲突,我们无法登录宿主机

你可能有疑问,172 可以分配超级多的 ip,怎么就用完了?因为每跑一个 docker-compose.yaml 都是要创建一个 br 开头的虚拟网卡的,分走一个 172.xxx。因为 B类地址范围是 172.16.0.0 ~172.31.255.255, 所以 172 开头的最多只能跑 15 个 docker-compose.yaml
当你需求太旺盛,一下子跑了 n 个 docker-compose.yaml,就可能导致 B 类地址被用完
最恶心的是,你执行 docker-compose down 之后,有些虚拟网卡不会被卸载,导致一直占用,所以并不是『同时15个把 B 类地址榨干』,而是『日积月累,把 B 类地址榨干』

为什么docker 网段冲突会和宿主机冲突?原因分析和解决方案_第1张图片

从此处可以看到,docker0 用的是 172.17.0.1

其他的 br 开头的都是 docker-compose 创建的虚拟网卡,也是 172.xxx.0.1

为什么docker 网段冲突会和宿主机冲突?原因分析和解决方案_第2张图片

但是因为我的这个机器是开发测试机器,所以我们会在上面运行 n 个 docker-compose.yaml

这久导致 172 的网段用完了,172 用完了,docker-compose 就去使用 192.168 开头的了,使用 192.168.16.1 的时候,就和我宿主机的 192.168.38.1 冲突了。

为什么这两个 192.168 开头的会冲突,和子网掩码长度有关系,一个是 192.168.16.1/20,另一个是 192.168.38.191/24

你可能感兴趣的:(docker)