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 类地址榨干』
从此处可以看到,docker0 用的是 172.17.0.1
其他的 br 开头的都是 docker-compose 创建的虚拟网卡,也是 172.xxx.0.1
但是因为我的这个机器是开发测试机器,所以我们会在上面运行 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
解决方案:
修改 /etc/docker/daemon.json
中的 default-address-pools
贴一下我的 /etc/docker/daemon.json
{
"registry-mirrors": [
"https://hz4anb2p.mirror.aliyuncs.com",
"https://mirror.ccs.tencentyun.com"
],
"default-address-pools": [
{
"base": "172.17.0.0/16",
"size": 16
},
{
"base": "172.21.0.0/16",
"size": 24
},
{
"base": "172.22.0.0/16",
"size": 24
}
]
}
这个时候需要重启 docker 服务
sudo service docker restart
然后使用 docker-compose up -d
创建的新的服务组,就会在 172.21 下面了
已有的要使用 docker-compose down
先把原来的网络移除掉,不然会复用老的网络
然后我 docker-compose up -d
了两个容器组,然后使用 ip --color a
命令查看,可以看到,新的容器组的 ip 是 172.21 下面了
参考:
设置bip无效
在daemon配置文件中单纯配置bip只对docker启动的容器有效,但是对docker-compose启动的容器无效。Docker engine is started with --bip argument, but it is ignored by docker-compose, which set up an additional bridge interface in addition to the docker0 interface. It is named br-f4a912f7750b and has the typical Docker 172.17.x.x format, which happens to conflict with the network I’m currently using.
关于 bip ,我没有设置,我只修改了 default-address-pools
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。