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

相关推荐
BullSmall22 分钟前
Sonarqube9.9 docker 镜像启动后 conf 下的配置文件没有了
docker·容器·eureka
ruofu3329 分钟前
wsl端是py312,但是项目是py311, 如何下载py311的依赖包(wheels)
python·docker
上海云盾-高防顾问1 小时前
SD-WAN 跨境加速,真实日常使用体验
网络·网络安全
spider_xcxc1 小时前
Docker 实战:容器化多服务应用,Dockerfile 与 Compose 配置全解析
docker·云原生·eureka·虚拟化·容器化
2401_873479401 小时前
SOC告警日志中IP归属不明怎么办?部署IP离线库三步提升响应效率
网络·网络协议·tcp/ip
Multipath7122 小时前
多链路聚合 + 宽带自组网 + 卫星便携站,构筑应急通信“铁三角”乾元通多链路聚合路由破局“三断”绝境,重构应急通信生命线
网络·5g·安全·智能路由器·实时音视频
nVisual2 小时前
机柜PDU安装位置与空间建模方案
大数据·网络·数据库·信息可视化·数据中心基础设施管理
许彰午2 小时前
09-媒体访问控制
网络
晚风吹长发2 小时前
Docker使用——Docker容器及相关命令
linux·运维·服务器·docker·容器·架构
ShiXZ2132 小时前
Docker Compose 安装与配置指南
运维·docker·容器