背景

集团有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. SQL 注入漏洞详解 - Union 注入

    1)漏洞简介 SQL 注入简介 SQL 注入 即是指 Web 应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在 Web 应用程序中事先定义好的查询语句的结尾上添加额外的 SQL 语句,在 ...

  2. 商业级java开发单体项目环境搭建

    写在开发前,端口经常被战占,windows10用以下命令先查先杀,netstat -aon | findstr "8080" taskkill /F /PID <PID> ...

  3. ipa文件上传到app store的构建版本的工具

    打包好ipa文件后,可以使用mac电脑上的xcode将ipa上传到app store的构建版本中,假如没有mac电脑,可以使用香蕉云编来将ipa文件上传到构建版本. 这里我们来介绍下ipa文件上传到a ...

  4. ios的idp/iep证书的生成方法,无苹果电脑

    在这个多端开发的年代,出现了很多优秀的开发框架,比如hbuilder和uniapp等等.我们可以使用这些框架来开发APP,假如我们要打包ios的app,则需要一个idp/iep证书. 那么这个证书是如 ...

  5. 平衡树之Splay树详解

    认识 Splay树,BST(二叉搜索树)的一种,整体效率很高,平摊操作次数为\(O(log_2n)\),也就是说,在一棵有n个节点的BST上做M次Splay操作,时间复杂度为\(O(Mlog_2n)\ ...

  6. CentOS安装RustDesk自建服务器

    一.安装node.js 1.下载并解压 [root@VM-8-2-centos src]# cd /usr/local # 下载node文件 [root@VM-8-2-centos local]# w ...

  7. 【IDEA】DEBUG调试问题

    不要将断点打在方法的声明上: 会有一个菱形标志,在标记之后运行DEBUG模式会跑不起来 查看所有的断点标记: 在这里直接找到所有标记位置,弄掉就会跑起来了

  8. 【Git】上传代码到码云

    教程来自于这个上面: https://www.jianshu.com/p/3e0b213ab03d 第一步:创建码云仓库 具体怎么点选这里不再演示了 第二步:创建本地文件夹 [这个目录用来做本地仓库, ...

  9. 【Redis】03 Redis 数据类型、相关补充、常用命令

    redis的数据类型 1,概述 使用Redis进行应用设计和开发的一个核心概念是数据类型. 与关系数据库不同,在Redis中不存在需要我们担心的表, 在使用Redis进行应用设计和开发时,我们首先应该 ...

  10. python高性能计算:cython使用openmp并行 —— 报错:undefined symbol: omp_get_thread_num

    test.pyx文件: from cython.parallel cimport parallel from openmp cimport omp_get_thread_num cpdef void ...