Docker-Compose 自动创建的网桥与局域网冲突的终极解决方案

一、问题描述

  在使用 docker-compose 部署应用时, docker 默认的网络模式是 bridge ,默认网段是 172.17.0.1/16。十分不巧的是我们自己物理机的局域网也使用的是 172.18.0.1/16 的网段。在执行 docker-compose -f docker-compose.yml up -d 部署服务后,自动生成的网桥会依次使用 172.18.x.x,然而悲催的事情发生了。docker 生成的网桥与局域网冲突了。

  于是乎,面向百度编程的漫漫长路开始了… …,但是,通过一次次的百度和谷歌,找到好多好多复制来复制去的博客,最终一遍一遍的试错,最终也没有解决我的问题,于是乎,这篇含金量达到 99.9999999999999999999999999% 的文章出炉了。

1

  • 本次实验环节的 Docker 版本

    [root@node100 docker-compose]# docker info | grep 'Server Version'
     Server Version: 19.03.12
    
二、解决方案
  1. 停止 docker-compose 创建的容器

    docker-compose -f docker-compose.yml down
    
  2. 操作 Docker 容器

    # 停止 Docker 容器
    sudo systemctl stop docker
    
    # 停止 docker0 网桥
    sudo ip link set dev docker0 down
    
    # 删除 docker0 网桥
    sudo brctl delbr docker0
    
    # 重置 iptables
    sudo iptables -t nat -F POSTROUTING
    

    P.S

    # linux brctl command not found,安装 brctl 
    yum install bridge-utils -y
    
  3. 修改 daemon.json

    # 编辑 daemon.json 文件
    vim /etc/docker/daemon.json
    
    # 添加如下内容,包含设置 Docker 容器的 IP 网段
    "default-address-pools" : [
        {
          "base" : "192.168.0.0/16",
          "size" : 24
        }
    ]
    

    P.S

    注意:如果 daemon.json 中包含了其它的内容,请切记语法格式的正确性,比如用逗号隔开。

  4. 重启 Docker 容器

    sudo systemctl daemon-reload
    
    sudo systemctl start docker
    
  5. 重新安装和启动 docker-compose 的命令

    docker-compose -f docker-compose.yml up -d
    
三、拓展方案
  • 点击此处获取 ISSUES 大佬们给出的一些解决方案

    • 方案一

      2

    • 方案二

      3

    • 方案三

      4

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值