网络小白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,那就大功告成了!

相关推荐
复园电子2 小时前
HTTPS与TLS1.2双重加密:USB网络数据传输安全的底层核心技术解析
服务器·网络·安全·https
菜_小_白2 小时前
RTP协议收发组件开发
linux·网络·c++
marsh02062 小时前
32 openclaw容器化部署:Docker与Kubernetes集成指南
docker·ai·容器·kubernetes·编程·技术
Deitymoon2 小时前
linux——UDP编程
linux·网络·udp
华普微HOPERF2 小时前
如何善用Sub-GHz射频芯片,打造低功耗、高稳定的IoT通信网络?
网络·物联网
360智汇云2 小时前
从安全组到网络ACL:企业级网络隔离能力的进阶方案
网络·安全
一招定胜负2 小时前
docker基础知识
docker·容器·eureka
徒 花2 小时前
HCIP学习09 重发布(路由引入)+ 路由策略
网络·学习·hcip
IP老炮不瞎唠3 小时前
如何利用住宅代理提升Capsolver验证码通过率
网络