【linux】【docker】Docker默认网段配置导致无法访问
背景
集团有N个基地,所有基地的网络使用的是172.x.x.x网段,这本身没有什么问题!但Docker默认的桥接网段也是172.17.x.x的,如果不修改docker的默认配置会导致个别基地无法访问!列举几个基地使用的网段
| 基地 | 网段 |
|---|---|
| A基地 | 172.30.x.x |
| B基地 | 172.28.x.x |
| C基地 | 172.18.x.x |
如果不修改docker默认配置,随着容器创建得越多,最终总会和某个基地冲突。
参考拓展知识:docker默认子网创建规则
一、检查服务器中的Docker网络情况
检查docker的子网配置
使用 ifconfig docker查看docker默认分配的子网
docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
inet6 fe80::42:f6ff:fee8:ad97 prefixlen 64 scopeid 0x20<link>
ether 02:42:f6:e8:ad:97 txqueuelen 0 (Ethernet)
RX packets 42355 bytes 67869451 (64.7 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 55344 bytes 9332802 (8.9 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
说明:如果此处显示的172.x.x.x则代表是隐患网段,需要更改。
检查docker容器已分配的子网
使用docker network inspect $(docker network ls -q) | grep Subnet查看Docker是否已经创建网络
[root@yw_did_test ~]# docker network inspect $(docker network ls -q) | grep Subnet
"Subnet": "172.17.0.0/16",
"Subnet": "172.23.0.0/16",
"Subnet": "172.20.0.0/16",
如果命令执行后有数据返回并且是172.x.x.x的网段,则代表已经创建network,并分配了存在隐患的网段,需要更改。
参考拓展知识:docker默认子网创建规则
二、修改默认子网
场景1:新装Docker(无正在运行的容器
- 编辑配置文件
vi /etc/docker/daemon.json,新增一条配置
"bip":"192.22.0.1/24"
- 重启docker和加载文件
sudo systemctl daemon-reload && systemctl restart docker
- 然后使用
ifconfig docker命令查看是否生效,效果如下:
[root@op-manager-center-prod ~]# ifconfig docker
docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 192.22.0.1 netmask 255.255.255.0 broadcast 192.22.0.255
ether 02:42:9d:8d:d8:92 txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
场景2:修改原有Docker(有正在运行的容器)
注意:docker run 时如果没有手动指定子网,会自动按照默认规则创建子网,即使按照场景1进行更改也无法生效。 参考拓展知识:docker默认子网创建规则
解决思路和步骤:
- 停止容器
- 按照场景1修改默认子网
- 删除已有容器的network
- 手动关联容器的网络
- 再启动容器
Docker-Compose 自动创建的网桥与局域网冲突解决方案 - 知乎 (zhihu.com)
拓展知识
- docker默认子网创建规则
当您使用默认的桥接网络模式(bridge)时,Docker 会为每个容器创建一个独立的子网,并为每个子网分配一个 CIDR 地址范围。在默认情况下,Docker 使用 172.17.0.0/16 CIDR 地址范围来创建这些子网。
每次创建容器时,Docker 会从该 CIDR 地址范围中选择一个未被使用的子网,并将容器分配到该子网中的一个 IP 地址。
假设您已经运行了 10 个容器,并且每个容器都位于独立的子网中。每个子网的 IP 范围都是 /16,这意味着每个子网有约 65534 个可用 IP 地址(除去网络地址和广播地址)。
Docker 在默认情况下会按顺序分配子网的 IP 地址,每个子网的 IP 范围如下所示:
子网1:172.17.0.1 - 172.17.255.254
子网2:172.18.0.1 - 172.18.255.254
子网3:172.19.0.1 - 172.19.255.254
子网4:172.20.0.1 - 172.20.255.254
子网5:172.21.0.1 - 172.21.255.254
子网6:172.22.0.1 - 172.22.255.254
子网7:172.23.0.1 - 172.23.255.254
子网8:172.24.0.1 - 172.24.255.254
子网9:172.25.0.1 - 172.25.255.254
子网10:172.26.0.1 - 172.26.255.254
【linux】【docker】Docker默认网段配置导致无法访问的更多相关文章
- Docker修改默认网段
因阿里云服务器VPC默认占用了172.16.0.0/16 网段,与Docker里的网段相同,导致Docker里无法连接VPC服务器.后来找到的解决方案是修改Docker的默认网段. 由于Docker默 ...
- 如何修改Docker的默认网段?
背景 公司的服务器全部都是购买的阿里云ECS主机,默认内网网段为172.16.0.0/12,测试服上的服务基本都是使用Docker部署的. 之前的同事在该机器上安装的Docker全部都是默认配置,网段 ...
- Docker中mysql修改配置导致无法启动的docker容器
宿主机中查找my.cnf文件 # find / -name my.cnf |grep '/etc/mysql/my.cnf' 找到: /data/docker/overlay2/dfc2ddbed53 ...
- docker redis安装及配置(外网访问 关闭安全限制 设置密码)
docker run -p 6379:6379 --name redis -v /usr/local/redis/etc/redis.conf:/etc/redis/redis.conf -v /us ...
- docker安装nginx并配置通过https访问
1. 下载最新的nginx的docker image docker pull nginx:latest 创建挂载路径 2.准备nginx需要的文件 nginx的配置文件 首先是nginx.conf文件 ...
- linux 关于Apache默认编码错误 导致网站乱码的解决方案
Apache默认编码UTF-8在解析A网站的时候没有任何问题,当运行B网站时出现的"蝌蚪文"乱码问题 最近经常有同学在使用LAMP/WAMP时,遇到这样的编码错误问题: A网站 ...
- Vagrant安装完lnmp后,配置linux和windows共享文件并配置虚拟主机访问项目
虚拟机目录下的Vagrantfile文件是vagrant的配置文件,如果想把虚拟机当作一台服务器,可以通过ip访问,需要修改配置文件进行配置. (1)第一步:打开虚拟机目录下的Vagrantfile文 ...
- Docker 容器与宿主机网段冲突导致网络无法 ping 通的解决方案
docker 容器网络默认使用 bridge 桥接模式,正常情况下,容器会使用 daemon.json 中定义的虚拟网桥来与宿主机进行通讯. 最近更新 Docker for mac 之后,发现以前容器 ...
- Docker修改默认的网段
一,问题 docker安装后默认的网段是172.17网段的,和真实环境网段冲突导致本机电脑无法连接docker机器. 二,解决办法 修改docker默认网段 1,先把docker停止 systemct ...
- Docker:如何修改Docker0网桥的默认网段
1. 背景 Docker 服务启动后默认会创建一个 docker0 网桥(其上有一个 docker0 内部接口),它在内核层连通了其他的物理或虚拟网卡,这就将所有容器和本地主机都放到同一个物理网络. ...
随机推荐
- [oeasy]python0117 文字的演化_埃及圣书体_象形文字_楔形文字
埃及圣书体 回忆上次内容 两河流域 苏美尔文明 所使用的 楔形文字 不是象形文字 添加图片注释,不超过 140 字(可选) 楔形文字的字型 究竟是怎么来的呢? 巴别塔 苏美尔的 ...
- JavaScript高级~数组偏平化
方式一: let arr=[11,[22,[33,[44]]],[55,66,77],88,99,['00']] let arr2=arr.toString().split("," ...
- 提高MQ可靠性
提高可靠性通过以下四个方面: 生产者的可靠性(发送消息时丢失) 生产者发送消息时连接MQ失败 生产者发送消息到达MQ后未找到exchange 生产者发生消息到达MQ的exchange后,未找到合适的q ...
- 从DDPM到DDIM(四) 预测噪声与后处理
从DDPM到DDIM(四) 预测噪声与后处理 前情回顾 下图展示了DDPM的双向马尔可夫模型. 训练目标.最大化证据下界等价于最小化以下损失函数: \[\boldsymbol{\theta}^*=\u ...
- 【ActiveJdbc】05
一.事务 通常在 Java ORM 中有一个显式连接或管理器对象(JPA 中的 EntityManager,Hibernate 中的 SessionManager 等). ActiveJDBC 中没有 ...
- 【Java】找不到此类异常
Java.lang.classNotFoundException 找不到此类异常: java.lang.ClassNotFoundException: org.springframework.web. ...
- python高性能计算:cython入门代码
三种实现的对比: (1)纯python x.py def is_prime(num): for j in range(2, num): if (num%j)==0: return False retu ...
- 人工智能领域在显卡短缺之下的思考——“【亦】微笑面对显卡短缺:不买更快乐”有感——mindspore快快成长
划水之时看了看B站视频: [亦]微笑面对显卡短缺:不买更快乐 https://www.bilibili.com/video/BV1RZ4y1c7qT 在显卡短缺之下不仅仅电脑游戏玩家被卡脖子就连高校和 ...
- mybatis升级为mybatis-plus
1.背景 为了快速开发,需要把之前的老项目升级为mybatis-plus 2.步骤 步骤一:导入jar包 <dependency> <groupId>com.baomidou& ...
- 7E头的那些事儿(帧格式分析实例)
0. 前言 作为一名嵌入式工程师,经常需要通过UART与外设打交道,而对于串行总线来说,往往我们必须要进行帧同步.通常的做法是把信令包含在2个0x7E的中间. 除此之外还有HDLC.PPP等协议也会到 ...