如何避免docker网络和宿主机网络冲突

文章目录

  • 一、问题分析
  • 二、解决方案
    • 1、网段分配
    • 2、修改docker配置
    • 3、docker-compose配置
    • 4、工作机制
    • 5、网段创建验证
    • 6、容器IP验证

一、问题分析

docker0网桥默认是172段的一个地址172.17.0.1,如果刚好自己的宿主机服务器也处于这个网段,那这很容易冲突,会抢占172.17.x.x的网关,数据包会默认优先发到docker0的172.17.0.1地址上导致跨网段网络不通,从而导致和宿主机失联,下面分享下如何避免这个问题。

二、解决方案

1、网段分配

选择一个不常用的A、B、C段私有网段,并和自己所处的网段划分确认,没有冲突即可,我这里选择10.255.1.0/16

2、修改docker配置

修改/etc/docekr/daemon.json 配置

{            
  "bip": "10.255.0.1/24",  // 默认网桥占用10.255.0.0/24段,避免直接配置10.255.0.1/16,这样默认就占用整个网段,不利于后面自定义网络的使用,剩余网段10.255.1.0-10.255.255.0可用于自定义网络            
"default-address-pools": [            
    {            
      "base": "10.255.1.0/16", //基础网段,可用范围 10.255.1.0 ~ 10.255.255.255            
      "size": 24   //每个子网的大小为 /24(即 256 个 IP 地址)            
    }            
],            
...            
}    

改完记得重启docker服务

$ systemctl restart docker     

3、docker-compose配置

docker-compose中的网络配置示例

docker-compose1:            
...            
networks:            
project-a:            
    driver: bridge            
    ipam:            
      config:            
        - subnet: 10.255.1.0/24            


docker-compose2:            
...            
networks:            
project-b:            
    driver: bridge            
    ipam:            
      config:            
        - subnet: 10.255.2.0/24  

4、工作机制

1)当你创建新网络时:

Docker 会从 10.255.1.0/16 中分配一个未使用的 /24 子网。

· 第一个网络可能获得 10.255.1.0/24

· 第二个网络可能获得 10.255.2.0/24

· 依此类推…

2) 每个子网的网关默认是子网的第一个 IP(如 10.255.1.1)。

3)与 bip 的协同

  • 默认网桥(docker0):占用 10.255.0.0/24,网关为 10.255.0.1。
  • 自定义网络:从 10.255.1.0/16 分配子网(如 10.255.1.0/24),网关为 10.255.1.1。

两者不会冲突,因为网段不同。

5、网段创建验证

使用docker-compose创建两个项目之后查看

会发现会有三个网段的创建,网关分别是10.255.0.1、10.255.1.1、10.255.2.1
在这里插入图片描述

6、容器IP验证

查看每个容器的IP

$ docker ps -q | xargs -I {} docker inspect -f '{{.Name}}: {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' {} | sed 's/^\///'

可以看到两个项目的容器分别处于10.255.1.0/24和10.255.2.0/24两个子网
在这里插入图片描述
这样就可以避免这个问题了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bjzhang75

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值