首页 > 系统相关 >【linux】【docker】Docker默认网段配置导致无法访问

【linux】【docker】Docker默认网段配置导致无法访问

时间:2024-09-20 16:24:19浏览次数:8  
标签:子网 网段 0.1 无法访问 默认 255.254 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(无正在运行的容器

  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)

三、docker-compose修改方式

注意:docker-compose的运行方式与默认的docker网络模式不同,也就是说就算修改了默认子网,docker-compose up -d也是默认使用172.x.x.x,如果是docker-compose可以不修改上面的网络
解决方案:指定网络

#se版本,向下兼容,我选的最高版本
version: "3.3"
# 定义服务
services:
  #省略
  network:
   - default-network

networks:
  default-network:
    driver: bridge
    ipam:
      config:
        - subnet: 192.22.1.0/24

拓展知识

  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

标签:子网,网段,0.1,无法访问,默认,255.254,linux,docker,Docker
From: https://www.cnblogs.com/minsin/p/18422737

相关文章

  • centos(linux): logrotate常用功能
    一,测试配置是否正确?-d:打印debug信息-v:显示详细的输出信息[[email protected]]#logrotate-d/etc/logrotate.d/secure-v二,配置/var/log/secure按天分割/etc/logrotate.d/secure/var/log/secure{missingokdailyrotate90notifemptydatee......
  • linux 基础知识 什么是僵尸进程?有什么影响?如何解决?
    linux系统僵尸进程在Linux系统中,僵尸进程(ZombieProcess)是一种特殊的进程状态,它指的是一个已经完成执行的进程,其父进程尚未通过wait()或waitpid()系统调用来回收其资源和状态信息。僵尸进程本身并不占用CPU和其他资源,但它的进程描述符(PCB)仍然保留在系统中,这会占用系统资源并可......
  • 在ESP32-C3上运行Linux:探索RISC-V的无限可能
    在ESP32-C3上运行Linux:探索RISC-V的无限可能随着物联网和嵌入式系统的快速发展,开发者们对更强大、更灵活的平台需求日益增长。今天,我们向大家介绍一个令人兴奋的开源项目——在ESP32-C3上引导Linux内核。这个项目展示了如何在ESP32-C3RISC-V处理器上运行Linux,为开发者打开......
  • linux基础-linux基本命令
       linux基本命令    1.APT(AdvancedPackingTool)   ubuntu中功能最强大的命令行软件包管理工具,用于获取、   安装、编译、卸载和查询一些软件包,以及检测软件信号关系。      工作原理:       /etc/apt/sources.list文件  ......
  • 【Linux 】开发利器:深度探索 Vim 编辑器的无限可能
    ......
  • linux基础-shell脚本
    0.shell是什么东西?    shell是一个命令解析器。   我们可以把很多要执行的命令,以某种语言的方式,   组织起来交给shell去解析执行。      xxx.sh是多个命令的组织文件,shell脚本文件,也是一个普通   文件,是以shell脚本语言的方式、语法把多......
  • linux 下安装 RabbitMq 及 .net core 实操多种模式
    当前系统DebianGNU/Linux12安装命令1、sudoaptupdate//更新系统2、sudoapt-getinstallrabbitmq-server//安装rabbitMq服务3、sudoservicerabbitmq-serverstart//启动rabbitMq4、sudosystemctlenablerabbitmq-server//设置......
  • Linux curl命令详解使用
    curl是一个非常强大且灵活的工具,支持多种协议(如HTTP、HTTPS、FTP等),并通过各种选项支持不同的请求方式、认证机制、代理设置、传输限制等。这些参数可以极大地提高网络请求中的效率和灵活性。curl命令的基本语法curl[options][URL...]options:指定不同操作的参数。U......
  • 国产linux系统(银河麒麟,统信uos)使用 PageOffice 国产版实现前端框架内置对话框在Word中
    PageOffice国产版:支持信创系统,支持银河麒麟V10和统信UOS,支持X86(intel、兆芯、海光等)、ARM(飞腾、鲲鹏、麒麟等)、龙芯(LoogArch)芯片架构。本示例关键代码的编写位置Vue+Springboot注意本文中展示的代码均为关键代码,复制粘贴到您的项目中,按照实际的情况,例如文档路径,用户名等做......
  • 基于Linux系统静默安装Oracle数据库
    基于Linux系统静默安装Oracle数据库a.安装环境准备步骤1:环境准备安装依赖如果服务器能连接网络,直接安装所需的依赖库:yuminstalllibnsllibnsl2-devellibaio-devellibcap-develxorg-x11-utilsxauthgccmakelibstdc++-develsysstatsmartmontoolsglibc-compat......