背景

集团有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(无正在运行的容器

  1. 编辑配置文件 vi /etc/docker/daemon.json,新增一条配置
   "bip":"192.22.0.1/24"
  1. 重启docker和加载文件
sudo systemctl daemon-reload && systemctl restart docker
  1. 然后使用 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. 停止容器
  2. 按照场景1修改默认子网
  3. 删除已有容器的network
  4. 手动关联容器的网络
  5. 再启动容器

Docker-Compose 自动创建的网桥与局域网冲突解决方案 - 知乎 (zhihu.com)

拓展知识

  1. 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默认网段配置导致无法访问的更多相关文章

  1. Docker修改默认网段

    因阿里云服务器VPC默认占用了172.16.0.0/16 网段,与Docker里的网段相同,导致Docker里无法连接VPC服务器.后来找到的解决方案是修改Docker的默认网段. 由于Docker默 ...

  2. 如何修改Docker的默认网段?

    背景 公司的服务器全部都是购买的阿里云ECS主机,默认内网网段为172.16.0.0/12,测试服上的服务基本都是使用Docker部署的. 之前的同事在该机器上安装的Docker全部都是默认配置,网段 ...

  3. Docker中mysql修改配置导致无法启动的docker容器

    宿主机中查找my.cnf文件 # find / -name my.cnf |grep '/etc/mysql/my.cnf' 找到: /data/docker/overlay2/dfc2ddbed53 ...

  4. docker redis安装及配置(外网访问 关闭安全限制 设置密码)

    docker run -p 6379:6379 --name redis -v /usr/local/redis/etc/redis.conf:/etc/redis/redis.conf -v /us ...

  5. docker安装nginx并配置通过https访问

    1. 下载最新的nginx的docker image docker pull nginx:latest 创建挂载路径 2.准备nginx需要的文件 nginx的配置文件 首先是nginx.conf文件 ...

  6. linux 关于Apache默认编码错误 导致网站乱码的解决方案

    Apache默认编码UTF-8在解析A网站的时候没有任何问题,当运行B网站时出现的"蝌蚪文"乱码问题   最近经常有同学在使用LAMP/WAMP时,遇到这样的编码错误问题: A网站 ...

  7. Vagrant安装完lnmp后,配置linux和windows共享文件并配置虚拟主机访问项目

    虚拟机目录下的Vagrantfile文件是vagrant的配置文件,如果想把虚拟机当作一台服务器,可以通过ip访问,需要修改配置文件进行配置. (1)第一步:打开虚拟机目录下的Vagrantfile文 ...

  8. Docker 容器与宿主机网段冲突导致网络无法 ping 通的解决方案

    docker 容器网络默认使用 bridge 桥接模式,正常情况下,容器会使用 daemon.json 中定义的虚拟网桥来与宿主机进行通讯. 最近更新 Docker for mac 之后,发现以前容器 ...

  9. Docker修改默认的网段

    一,问题 docker安装后默认的网段是172.17网段的,和真实环境网段冲突导致本机电脑无法连接docker机器. 二,解决办法 修改docker默认网段 1,先把docker停止 systemct ...

  10. Docker:如何修改Docker0网桥的默认网段

    1. 背景 Docker 服务启动后默认会创建一个 docker0 网桥(其上有一个 docker0 内部接口),它在内核层连通了其他的物理或虚拟网卡,这就将所有容器和本地主机都放到同一个物理网络. ...

随机推荐

  1. Python 利用argparse模块实现脚本命令行参数解析

    利用argparse模块实现脚本命令行参数解析 By:授客 QQ:1033553122 #代码实践1 study.py内容如下 #!/usr/bin/env python # -*- coding:u ...

  2. 神经网络之卷积篇:详解计算机视觉(Computer vision)

    详解计算机视觉 计算机视觉是一个飞速发展的一个领域,这多亏了深度学习.深度学习与计算机视觉可以帮助汽车,查明周围的行人和汽车,并帮助汽车避开它们.还使得人脸识别技术变得更加效率和精准,即将能够体验到或 ...

  3. Jmeter函数助手22-V

    V函数用于执行变量名.嵌套函数.类似eval函数 Name of variable (may include variable and function references):必填,填入变量名称或者 ...

  4. Java还是C#?我该如何选择?给年轻人的建议...

    一.年轻人应该通吃 其实这不应该是我们真正的主题,而且入了行的也很少会java还是c#这么比,但初学的,java和c#往往就代表了两大流派,java代替了j2ee,c#代替了.net,ok,没有关系, ...

  5. 微软的GitHub Copilot

    随着OpenAI的ChatGPT4 Turbo的发布,基于ChatGPT的Copilot也推出了最新版. ======================================= 帮助文档: h ...

  6. MPI经典课程视频 —— 中国科学技术大学-并行计算(国家级精品课) —— 陈国良院士的06年课程

    课程视频地址: https://www.bilibili.com/video/BV1U7411N78e

  7. 神奇的发现——所有的aarch64架构的CPU平台下的深度学习框架均不原生支持CUDA

    一个记录: 神奇的发型--所有的aarch64架构的CPU平台下的深度学习框架均不原生支持CUDA 不论是mindspore.pytorch.TensorFlow框架只要是aarch64架构的CPU下 ...

  8. Chrome(Google) 浏览器安装Vue2、Vue3插件方法 (亲测有效)

    1.背景 2.步骤 步骤一:下载插件 网站:https://chrome.zzzmh.cn/#/search 百度网盘下载: 链接:https://pan.baidu.com/s/1xdEK-7qVx ...

  9. Apache DolphinScheduler使用图关系解决核心链路告警问题,减轻任务运维负担!

    转载自程序员小陶 Apache DolphinScheduler 在使用过程中,肯定会有任务出现失败的情况,那么问题来了:调度任务的告警是需要人为配置的,在生产环境中,面对海量的任务,如何找到重要的任 ...

  10. fs4412 I2C驱动基于Cortex-A9,mpu6050裸机程序,驱动,I2C架构,有这一篇够了

    本文基于三星Cortex-A9架构,Exynos4412讲解I2C原理.以及基于I2C的mpu6050陀螺仪的数据读取实例(包括在裸机模式下数据的读取以及基于Linux驱动的读取).还会分析Linux ...