1.創(chuàng)建docker網(wǎng)卡
[root@i ~]# brctl addbr docker0
[root@i ~]# ip addr add 192.168.42.1/24 dev docker0
# 這里的ip是給docker內(nèi)部用的, 隨意配置一個即可
[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.添加子網(wǎng)
[root@i ~]# docker network create backend
# 這樣我們就創(chuàng)建了backend子網(wǎng),docker-compose就可以直接使用這個network
# 如果無法常見子網(wǎng),則使用下面的命令,跳過安全問題
[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.刪除網(wǎng)卡
[root@i ~]# brctl show
#查看網(wǎng)橋狀態(tài)
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 <網(wǎng)橋名> <端口名>
#卸載網(wǎng)橋上的端口
[root@i ~]# ifconfig
#查看是否有網(wǎng)橋網(wǎng)卡名
[root@i ~]# ifconfig <網(wǎng)橋名> down
#關(guān)閉此網(wǎng)卡
[root@i ~]# brctl delbr <網(wǎng)橋名>
#刪除網(wǎng)橋
補充:Docker-Compose 自動創(chuàng)建的網(wǎng)橋與局域網(wǎng)沖突的終極解決方案
一、問題描述
在使用 docker-compose 部署應用時, docker 默認的網(wǎng)絡(luò)模式是 bridge ,默認網(wǎng)段是 172.17.0.1/16。十分不巧的是我們自己物理機的局域網(wǎng)也使用的是 172.18.0.1/16 的網(wǎng)段。
在執(zhí)行 docker-compose -f docker-compose.yml up -d 部署服務后,自動生成的網(wǎng)橋會依次使用 172.18.x.x,然而悲催的事情發(fā)生了。docker 生成的網(wǎng)橋與局域網(wǎng)沖突了。
于是乎,面向百度編程的漫漫長路開始了… …,但是,通過一次次的百度和谷歌,找到好多好多復制來復制去的博客,最終一遍一遍的試錯,最終也沒有解決我的問題,于是乎,這篇含金量達到 99.9999999999999999999999999% 的文章出爐了。
![](/d/20211016/bb7d307a8acb2c9de485a702f8ac5c34.gif)
本次實驗環(huán)節(jié)的 Docker 版本
[root@node100 docker-compose]# docker info | grep 'Server Version'
Server Version: 19.03.12
二、解決方案
停止 docker-compose 創(chuàng)建的容器
docker-compose -f docker-compose.yml down
操作 Docker 容器
# 停止 Docker 容器
sudo systemctl stop docker
# 停止 docker0 網(wǎng)橋
sudo ip link set dev docker0 down
# 刪除 docker0 網(wǎng)橋
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
# 添加如下內(nèi)容,包含設(shè)置 Docker 容器的 IP 網(wǎng)段
"default-address-pools" : [
{
"base" : "192.168.0.0/16",
"size" : 24
}
]
P.S
注意:如果 daemon.json 中包含了其它的內(nèi)容,請切記語法格式的正確性,比如用逗號隔開。
重啟 Docker 容器
sudo systemctl daemon-reload
sudo systemctl start docker
重新安裝和啟動 docker-compose 的命令
docker-compose -f docker-compose.yml up -d
三、拓展方案
點擊此處獲取 ISSUES 大佬們給出的一些解決方案
方案一
![](/d/20211016/b86e09f1077587f2a4c1d7db3a21301d.gif)
方案二
![](/d/20211016/58bcaea2f8a837ecf30a48d60164f089.gif)
方案三
![](/d/20211016/9e2d53320c7d82b194bae13e9c617774.gif)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。