网络小白docker network create时如何指定subnet 和gateway

对于网络小白来说,理解 --subnet--gateway 最简单的方法是把它想象成**"给容器们分配一个独立的房间"**。

  • 宿主机(你的电脑/服务器):是大房子。
  • Docker 网络:是大房子里的一个小房间。
  • Subnet (子网):规定这个房间里有多少个床位(IP地址范围)。
  • Gateway (网关):是这个房间的"门口",容器要出去上网或找宿主机,必须经过这个门口。

🛑 核心原则:不要和"大房子"里的其他房间撞车

不能 随便写,是因为如果 Docker 分配的 IP 段和你家里路由器、或者公司网络的 IP 段重复了,就会发生"交通堵塞"(路由冲突),导致你上不了网或连不上打印机。


✅ 第一步:查看宿主机哪些配置需要避开?

你需要避开的是宿主机当前正在使用的网段。请在终端执行以下命令查看:

Linux / macOS:
bash 复制代码
ip route show
# 或者
route -n
Windows (PowerShell):
powershell 复制代码
Get-NetRoute | Where-Object { $_.DestinationPrefix -ne '::/0' -and $_.DestinationPrefix -ne '0.0.0.0/0' }

重点关注输出中的这一列:

通常你会看到类似这样的行:

text 复制代码
default via 192.168.1.1 dev eth0 ...
192.168.1.0/24 dev eth0 ...
172.17.0.0/16 dev docker0 ...

你需要避开的网段是:

  1. 物理网卡网段 :比如上面的 192.168.1.0/24。这意味着你家路由器大概是 192.168.1.x千万不要 把 Docker subnet 设为 192.168.1.x
  2. 默认 Docker 网段 :上面的 172.17.0.0/16。这是 Docker 安装时自动创建的默认桥接网络。不要172.17.x.x
  3. 其他已有 Docker 网络 :如果你之前创建过自定义网络,也要避开。可以用 docker network ls 查看。

✅ 第二步:如何安全地书写?(抄作业模板)

为了绝对安全,建议使用 10.x.x.x 开头的私有网段,因为绝大多数家用和公司局域网都不用这个段,几乎不会冲突。

推荐方案 A:最稳妥(推荐新手使用)

这个网段极其冷门,几乎不可能冲突。

bash 复制代码
docker network create \
  --driver bridge \
  --subnet 10.20.30.0/24 \
  --gateway 10.20.30.1 \
  my-safe-net
  • 解释
    • 10.20.30.0/24:表示 IP 范围是 10.20.30.110.20.30.254
    • 10.20.30.1:作为网关(门口)。
    • 容器会自动获得 10.20.30.2, 10.20.30.3 等 IP。
推荐方案 B:如果你想要更大的空间

如果你预计会有超过 250 个容器,可以用 /16

bash 复制代码
docker network create \
  --driver bridge \
  --subnet 10.50.0.0/16 \
  --gateway 10.50.0.1 \
  my-big-net
  • 解释
    • 10.50.0.0/16:表示 IP 范围是 10.50.0.110.50.255.254(约 6 万个 IP)。
    • 10.50.0.1:作为网关。

❌ 绝对不要写的例子(踩坑指南)

假设你的 ip route 显示默认网关是 192.168.1.1

  1. ❌ 错误写法 1(冲突):

    bash 复制代码
    --subnet 192.168.1.0/24 --gateway 192.168.1.1

    后果:你和路由器抢 IP,全网瘫痪。

  2. ❌ 错误写法 2(冲突):

    bash 复制代码
    --subnet 172.17.0.0/24 --gateway 172.17.0.1

    后果:和 Docker 默认网络冲突,创建失败。

  3. ❌ 错误写法 3(逻辑错误):

    bash 复制代码
    --subnet 192.168.10.0/24 --gateway 192.168.20.1

    后果:网关不在子网里,报错 Gateway ip ... is not in the range


💡 总结:小白万能公式

如果你不想去查 ip route,只想无脑创建一个能用的网络,请直接复制下面这条命令,99.9% 不会出错

bash 复制代码
docker network create \
  --driver bridge \
  --subnet 10.10.10.0/24 \
  --gateway 10.10.10.1 \
  my-network

验证是否成功:

bash 复制代码
docker network inspect my-network

如果能看到 JSON 输出,且 Subnet10.10.10.0/24,那就大功告成了!

相关推荐
严谨的麻辣烫1 天前
数据中心出口与住宅出口的技术差异:从 ASN 到 TCP 行为的一次拆解
网络·网络协议·tcp/ip
Freed&1 天前
Zabbix TCP连接状态自定义监控完整部署手册
网络·tcp/ip·zabbix
学着改变2751 天前
手持式超声波流量计为何首选行澳科技?便携巡检与外夹计量的性能标杆
大数据·网络·人工智能·科技·产品运营·量子计算
2501_915921431 天前
抓包鹰 Traceeagle 解除证书绑定,SSL Pinning 解除
网络·网络协议·网络安全·ios·adb·https·ssl
Lucky_Turtle1 天前
【SSL】letsencrypt域名证书申请,Cloudflare域名
网络·网络协议·ssl
路由侠内网穿透1 天前
本地部署企业级快速开发平台芋道管理后台并实现外部访问
运维·服务器·网络·网络协议
basketball6161 天前
软考中级网络工程师 第4章 无线通信网 备考总结
linux·服务器·网络·网络工程师·软考
睡一觉就好了。1 天前
Linux 信号机制
linux·运维·网络
A_humble_scholar1 天前
Linux(二) C++ TCP/UDP网络编程
linux·网络·c++
nnerddboy1 天前
Rust教程05:结构体,枚举与模式匹配
开发语言·网络·rust