首页 > 其他分享 >docker修改默认分配网桥子网

docker修改默认分配网桥子网

时间:2022-12-23 14:11:16浏览次数:42  
标签:容器 子网 bridge 0.0 网桥 docker

docker修改默认分配网桥子网

  在安装完docker,启动容器时,docker会为容器默认分配一个容器子网,一般为172.17.0.0/24,当该虚机运行其他容器需要创建额外的网桥,可能会造成与现有虚机或物理网络重复的情况,这样容器网络通信的时候就会出问题。

  为了避免此问题,我们可在安装docker时,指定一个默认的网桥子网(综合公司现有的网络,挑选一个未使用到的),让后续启动的容器都在这个子网里创建网桥或者容器ip。

一、现有docker配置文件

[root@]# cat /etc/docker/daemon.json 
{
  "registry-mirrors": [
    "https://dockerhub.azk8s.cn",
    "https://docker.mirrors.ustc.edu.cn",
    "http://hub-mirror.c.163.com"
  ],
  "max-concurrent-downloads": 10,
  "log-driver": "json-file",
  "log-level": "warn",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
    },
  "data-root": "/data/docker"
}

二、查询路由及网桥

路由:

[devops@ ~]$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.16.0.1      0.0.0.0         UG    100    0        0 eth0
10.168.0.0      0.0.0.0         255.255.255.0   U     0      0        0 docker0
10.168.1.0      0.0.0.0         255.255.255.0   U     0      0        0 br-42e15d40f8c0
172.16.0.0      0.0.0.0         255.255.0.0     U     100    0        0 eth0
172.19.0.0      0.0.0.0         255.255.0.0     U     0      0        0 br-923ad69f1d3a
172.20.0.0      0.0.0.0         255.255.0.0     U     0      0        0 br-7bc6e6211d81
172.27.0.0      0.0.0.0         255.255.0.0     U     0      0        0 br-06cde0ff36a6
172.29.0.0      0.0.0.0         255.255.0.0     U     0      0        0 br-b756cddb71d9

网桥:

[root@03-centos7-redis devops]# docker network ls
NETWORK ID          NAME                              DRIVER              SCOPE
50495afe3b3e        bridge                            bridge              local
b756cddb71d9        dingtalk_default                  bridge              local
923ad69f1d3a        elastalert-docker-error_default   bridge              local
06cde0ff36a6        elastalert-docker_default         bridge              local
7bc6e6211d81        elastalert_default                bridge              local
0a2bdd5dca5f        host                              host                local
6a8d68b1a026        none                              null                local
42e15d40f8c0        skywalking_default                bridge              local
[root@03-centos7-redis devops]# 

  由上可发现,每个容器启动都会创建一个网桥,并分配一个子网,该容器在此子网内分配ip。若分配的子网与主机网络有冲突,势必会造成主机网络通信故障的问题。此时为避免,我们可以来修改docker默认分配的子网地址。

二、指定docker默认分配的子网

  可在docker配置文件中添加以下配置,重启docker即可。

{
  "registry-mirrors": [
    "https://dockerhub.azk8s.cn",
    "https://docker.mirrors.ustc.edu.cn",
    "http://hub-mirror.c.163.com"
  ],
  "default-address-pools":[
        {
            "base":"10.168.0.0/16",
            "size":24
        }
   ],
  "max-concurrent-downloads": 10,
  "log-driver": "json-file",
  "log-level": "warn",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
    },
  "data-root": "/data/docker"
}

三、重启docker

[root@]# systemctl restart docker

  注:已创建的容器会继续使用已绑定的网桥进行通信,不清除的话,默认还会存在。所以需要将容器down掉,重新创建一个网桥并使用新的网桥来分配ip。

四、将现有容器停掉,重启启动

  1、如果是docker-compose启动的容器,只需要docker-compose down -v即可,默认会remove掉当前使用的网桥,在docker-compose up -d时,会根据docker默认配置来新建一个网桥,而这个网桥便会使用我们前面指定的默认子网的ip。

  2、如果是单纯的docker启动的容器,在我们修改完docker默认配置后,该默认网桥的子网就会更新为我们指定的子网,可通过查询来验证:

[root@]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
0406a0ffc50e   bridge    bridge    local
eb3642010b55   host      host      local
07824f95dc1c   none      null      local

  而docker的四种网络模式用,默认使用bridge的方式来创建容器,及上面的ID为0406a0ffc50e的网桥,此时我们可以通过docker inspect来查看网桥子网是否更新:

[root@aicc-prod-0005 skywalking]# docker inspect 040
[
    {
        "Name": "bridge",
        "Id": "0406a0ffc50ea4f6513610fd6b4422368e33f99b6266ca2a035ee8e37873d785",
        "Created": "2022-12-23T13:54:07.173725469+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "10.168.0.0/24"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {
            "com.docker.network.bridge.default_bridge": "true",
            "com.docker.network.bridge.enable_icc": "true",
            "com.docker.network.bridge.enable_ip_masquerade": "true",
            "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
            "com.docker.network.bridge.name": "docker0",
            "com.docker.network.driver.mtu": "1500"
        },
        "Labels": {}
    }
]

  根据以上输出结果,我们可以得出结论,该默认网桥的子网与我们预期设置的一致,后续在启动容器会在10.168.0.0/24这个子网中分配容器ip,不会在出现容器网络与虚机网络重复的状况。

  

 

标签:容器,子网,bridge,0.0,网桥,docker
From: https://www.cnblogs.com/wushaoyu/p/17000559.html

相关文章

  • docker下tdengine导入导出
    1、进入容器dockerexec-it容器idbash2、进入dump脚本所在目录cd /usr/bin3、执行导出命令./taosdump-c/etc/taos-o/root -uroot -ptaosdata  cz ......
  • docker保持环境一致、镜像、容器、仓库、配置加速器、命令、dockerfile、部署django、
    如何保持环境一致?pip3freeze>requerment.txtpipinstall-rrequerment.txt1.环境不一致2.配置文件不一致3.技术水平不一致,导致部署环境快慢不一致docker一处编译,到处运......
  • 解决 Docker 的 DeviceMapper 占用空间过大
    某虚拟机运行容器半年后,磁盘空间报警,使用率超过百分之九十。经查后发现为Docker的DeviceMapper占用空间过大。概述DeviceMapper为容器的镜像和运行过程的缓存存放目......
  • Dockerfile介绍及常用保留指令
    从本文开始,咱们将介绍docker的另外一个技术点:dockerfile.我们来看看DockerFile相关的知识点,我们将怎么学习?1:DockerFile是什么?2:DockerFile构建过程解析3:常用的保留字指令4:案......
  • docker中mysql配置主从
    创建文件夹&编辑my.cnf内容mkdir-p/opt/docker/mysql-8.0/master/cnfmkdir-p/opt/docker/mysql-8.0/master/datavim/opt/docker/mysql-8.0/master/cnf/mysql.cnf[......
  • docker 安装 postgres 15.1
    docker拉取镜像:dockerpullpostgres:15.1创建文件夹,以及启动images创建文件夹:mkdir-p/opt/docker/postgresdockerrun--namepostgres\-ePOSTGRES_PASS......
  • Dockerfile介绍及常用保留指令
    从本文开始,咱们将介绍docker的另外一个技术点:dockerfile.我们来看看DockerFile相关的知识点,我们将怎么学习?1:DockerFile是什么?2:DockerFile构建过程解析3:常用的保留字指令......
  • Docker 架构演进之路
    转载:https://developer.aliyun.com/article/673009前言Docker已经推出了5年,在这5年中它极大的改变了互联网产品的架构,推进了新的产品开发、测试和运维方法。但是它自身也在......
  • Jenkins+Docker 一键自动化部署 SpringBoot 项目
    Jenkins+Docker一键自动化部署SpringBoot项目 本文章实现最简单全面的Jenkins+docker+springboot 一键自动部署项目,步骤齐全,少走坑路。环境:centos7+git(git......
  • Docker+Jenkins+Gitee+Maven构建后台jar包后配置SSH传送到服务器并执行指定命令
    场景Docker+Jenkins+Gitee+Maven项目配置jdk、maven、gitee等拉取代码并自动构建以及遇到的那些坑:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/12839905......