一、问题描述
在使用 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
大佬们给出的一些解决方案-
方案一
-
方案二
-
方案三
-