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 大佬们给出的一些解决方案
方案一
方案二
方案三
以上为个人经验,希望能给大家一个参考,也希望大家多多支持猪先飞。如有错误或未考虑完全的地方,望不吝赐教。
相关文章
docker 启动elasticsearch镜像,挂载目录后报错的解决
这篇文章主要介绍了docker 启动 elasticsearch镜像,挂载目录后报错的解决,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-11-20解决Docker中的error during connect异常情况
这篇文章主要介绍了解决Docker中的error during connect异常情况,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-11-22- 这篇文章主要介绍了python 获取计算机的网卡信息的方法,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下...2021-02-18
- 这篇文章主要介绍了docker部署confluence的完整步骤,这里的镜像并不是小编自己写的是基于他人打包的文中有详细介绍,需要的朋友可以参考下...2021-06-11
- 这篇文章主要介绍了解决docker挂载的目录无法读写问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-19
教你使用Portainer管理多台Docker容器环境的方法
这篇文章主要介绍了Portainer管理多台Docker容器环境,本文给大家介绍的非常详细,包括环境准备及管理docker的详细过程,需要的朋友可以参考下...2021-11-11- 这篇文章主要介绍了docker swarm外部验证负载均衡时不生效的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-04-27
- 这篇文章主要介绍了docker端口映射及外部无法访问问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-01-19
Docker 解决openjdk容器里无法使用JDK的jmap等命令问题
这篇文章主要介绍了Docker 解决openjdk容器里无法使用JDK的jmap等命令问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-12-04使用rpm安装指定版本docker(1.12.6)的详细步骤
为了防止安装高版本的docker引发的错误,需要安装1.12.6版本的docker,下面小编给大家带来了使用rpm安装指定版本的docker(1.12.6)的步骤,感兴趣的朋友一起看看吧...2021-08-11- 通过本文可以帮助大家快速学习Docker安装ElasticSearch的过程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧...2021-08-31
- 这篇文章主要介绍了一条命令重启所有已停止的docker容器操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-11-20
- 这篇文章主要介绍了在docker中执行linux shell命令的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-30
- 这篇文章主要给大家介绍了关于docker容器与宿主机的数据交互,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-09
安装Docker Desktop报错WSL 2 installation is incomplete的问题(解决报错)
这篇文章主要介绍了安装Docker Desktop报错WSL 2 installation is incomplete的问题,解决方法很简单只需我们自己手动更新一下,我们根据提示去微软官网下载最新版的wsl2安装后即可正常打开,需要的朋友可以参考下...2021-06-13详解如何使用Docker部署Django+MySQL8开发环境
这篇文章主要介绍了详解如何使用Docker部署Django+MySQL8开发环境,文中通过示例代码以及图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧...2020-07-19- 这篇文章主要介绍了Docker部署Rancher的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-01-06
- 这篇文章主要介绍了.NET 5 部署在docker上运行的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-03-06
Shell脚本构建Docker 半自动化编译打包发布应用操作
这篇文章主要介绍了Shell脚本构建Docker 半自动化编译打包发布应用操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-30- 现在很多开发者都使用Vagrant来管理他们的虚拟机开发环境,Vagrant确实很酷, 不过也有不少缺点(最主要的是它占用太多的资源)。在容器技术、Docker和更多类Docker技术出现后,解决这个问题就变得简单了。这篇文章主要介绍了Docker配置PHP开发环境,下面来一起看看吧。...2017-01-08