如何修改Docker默认子网配置

作者: 2024-09-21 09:57:45
标签:

背景

集团有N个基地,所有基地的网络使用的是172.x.x.x网段,这本身没有什么问题。但是Docker默认的桥接网段也是172.17.x.x,如果不修改docker的默认配置会导致个别基地无法访问。以下是几个基地使用的网段:

基地 网段
A基地 172.30.x.x
B基地 172.28.x.x
C基地 172.18.x.x

如果不修改docker默认配置,随着容器创建得越多,最终总会和某个基地冲突。

参考拓展知识:docker默认子网创建规则

一、检查服务器中的Docker网络情况

检查docker的子网配置

使用 ifconfig docker 查看docker默认分配的子网

docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        inet6 fe80::42:f6ff:fee8:ad97  prefixlen 64  scopeid 0x20<link>
        ether 02:42:f6:e8:ad:97  txqueuelen 0  (Ethernet)
        RX packets 42355  bytes 67869451 (64.7 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 55344  bytes 9332802 (8.9 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

说明:如果此处显示的172.x.x.x则代表是隐患网段,需要更改。

检查docker容器已分配的子网

使用 docker network inspect $(docker network ls -q) | grep Subnet 查看Docker是否已经创建网络

[root@yw_did_test ~]# docker network inspect $(docker network ls -q) | grep Subnet
                    "Subnet": "172.17.0.0/16",
                    "Subnet": "172.23.0.0/16",
                    "Subnet": "172.20.0.0/16",

如果命令执行后有数据返回并且是172.x.x.x的网段,则代表已经创建network,并分配了存在隐患的网段,需要更改。

参考拓展知识:docker默认子网创建规则

二、修改默认子网

场景1:新装Docker(无正在运行的容器)

  1. 编辑配置文件 vi /etc/docker/daemon.json ,新增一条配置
"bip":"192.22.0.1/24"

  1. 重启docker和加载文件
sudo systemctl daemon-reload && systemctl restart docker

  1. 然后使用 ifconfig docker 命令查看是否生效,效果如下:
[root@op-manager-center-prod ~]# ifconfig docker
docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.22.0.1  netmask 255.255.255.0  broadcast 192.22.0.255
        ether 02:42:9d:8d:d8:92  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

场景2:修改原有Docker(有正在运行的容器)

注意:docker run时如果没有手动指定子网,会自动按照默认规则创建子网,即使按照场景1进行更改也无法生效。 参考拓展知识:docker默认子网创建规则

解决思路和步骤:

  1. 停止容器
  2. 按照场景1修改默认子网
  3. 删除已有容器的network
  4. 手动关联容器的网络
  5. 再启动容器

Docker-Compose自动创建的网桥与局域网冲突解决方案 - 知乎 (zhihu.com)

三、docker-compose修改方式

注意:docker-compose的运行方式与默认的docker网络模式不同,也就是说就算修改了默认子网,docker-compose up -d也是默认使用172.x.x.x,如果是docker-compose可以不修改上面的网络

解决方案:指定网络

#se版本,向下兼容,我选的最高版本
version: "3.3"
# 定义服务
services:
  #省略
  network:
   - default-network

networks:
  default-network:
    driver: bridge
    ipam:
      config:
        - subnet: 192.22.1.0/24

拓展知识

  1. docker默认子网创建规则
当您使用默认的桥接网络模式(bridge)时,Docker会为每个容器创建一个独立的子网,并为每个子网分配一个CIDR地址范围。在默认情况下,Docker使用172.17.0.0/16 CIDR地址范围来创建这些子网。

每次创建容器时,Docker会从该CIDR地址范围中选择一个未被使用的子网,并将容器分配到该子网中的一个IP地址。

假设您已经运行了10个容器,并且每个容器都位于独立的子网中。每个子网的IP范围都是/16,这意味着每个子网有约65534个可用IP地址(除去网络地址和广播地址)。

Docker在默认情况下会按顺序分配子网的IP地址,每个子网的IP范围如下所示:

子网1:172.17.0.1 - 172.17.255.254
子网2:172.18.0.1 - 172.18.255.254
子网3:172.19.0.1 - 172.19.255.254
子网4:172.20.0.1 - 172.20.255.254
子网5:172.21.0.1 - 172.21.255.254
子网6:172.22.0.1 - 172.22.255.254
子网7:172.23.0.1 - 172.23.255.254
子网8:172.24.0.1 - 172.24.255.254
子网9:172.25.0.1 - 172.25.255.254
子网10:172.26.0.1 - 172.26.255.254

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

相关阅读

最新游戏 更多