docker-compose創建網橋,添加子網,刪除網卡的實現

1.創建docker網卡

[root@i ~]# brctl addbr docker0
[root@i ~]# ip addr add 192.168.42.1/24 dev docker0  
# 這裡的ip是給docker內部用的, 隨意配置一個即可
[root@i ~]# ip link set dev docker0 up
[root@i ~]# ip addr show docker0
# 查看docker
[root@i ~]# systemctl restart docker
[root@i ~]# systemctl restart docker
# 啟動docker服務

2.添加子網

[root@i ~]# docker network create backend
# 這樣我們就創建瞭backend子網,docker-compose就可以直接使用這個network
# 如果無法常見子網,則使用下面的命令,跳過安全問題
 
[root@i ~]# docker network create backend --subnet 172.24.24.0/24
 
[root@i ~]# docker network ls
NETWORK ID     NAME        DRIVER       SCOPE
6afff4d90f05    backend       bridge       local
57de7f32064e    bridge       bridge       local
4b44a5340d6e    host        host        local
ac8e8ffe243f    none        null        local

這裡可以看到有backend

3.刪除網卡

[root@i ~]# brctl show
#查看網橋狀態
bridge name   bridge id        STP enabled   interfaces
br-5db3fa0c465f     8000.02424cfb3937    no       veth038d483
                            veth2950f5c
                            veth669dc5e
                            veth715203f
                            veth9f31643
                            vethd0f5330
docker0     8000.3a4803cd6298    no       veth9d3badb
                            vethd7530fd
[root@i ~]# brctl delif <網橋名> <端口名>
#卸載網橋上的端口
[root@i ~]# ifconfig
#查看是否有網橋網卡名
[root@i ~]# ifconfig <網橋名> down
#關閉此網卡
[root@i ~]# brctl delbr <網橋名>
#刪除網橋

補充: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% 的文章出爐瞭。

本次實驗環節的 Docker 版本

[root@node100 docker-compose]# docker info | grep 'Server Version'
 Server Version: 19.03.12

二、解決方案

停止 docker-compose 創建的容器

docker-compose -f docker-compose.yml down

操作 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

修改 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 中包含瞭其它的內容,請切記語法格式的正確性,比如用逗號隔開。

重啟 Docker 容器

sudo systemctl daemon-reload
sudo systemctl start docker

重新安裝和啟動 docker-compose 的命令

docker-compose -f docker-compose.yml up -d

三、拓展方案

點擊此處獲取 ISSUES 大佬們給出的一些解決方案

方案一

方案二

方案三

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。如有錯誤或未考慮完全的地方,望不吝賜教。

推薦閱讀: