Error response from daemon: user specified IP address is supported only when connecting to networks with user configured subnets

历史:

(1)docker network create app_net

重新 创建app_net 后问题解决
(2)docker network create --subnet=172.19.0.0/16 --gateway=172.19.0.1 app_net

问题原因分析

为什么之前报错?

  • 原有的 app_net 网络可能是在早期 Docker 版本中创建的,或者创建时没有明确指定子网配置

  • Docker 对静态 IP 的支持需要网络有明确配置的子网

  • 重新创建时明确指定了 --subnet 参数,确保了网络的完整配置

网络概念详解

1. 什么是子网(Subnet)?

子网是 IP 网络的一个逻辑细分。想象一下:

  • 整个互联网就像一个大城市

  • 子网就像城市中的各个区(比如海淀区、朝阳区)

  • IP 地址就像每个区的具体门牌号

--subnet=172.19.0.0/16 解释:

  • 172.19.0.0:网络地址(就像区的名称)

  • /16:子网掩码,表示前16位是网络号  window 设置 ip时候,不就是255.255.0.0

  • 可用 IP 范围:172.19.0.1 - 172.19.255.254

  • 总共约 65,534 个可用 IP 地址

2. 网关(Gateway)

--gateway=172.19.0.1

  • 网关是子网的"出入口"

  • 就像小区的门卫,负责内外通信

  • 通常使用子网中的第一个可用 IP(.1

3. app_net 的作用

为什么需要自定义网络?

特性默认 bridge 网络自定义 app_net
服务发现❌ 不支持✅ 支持容器名解析
静态 IP❌ 有限支持✅ 完整支持
网络隔离❌ 所有容器混杂✅ 业务隔离
DNS 解析❌ 无✅ 自动 DNS

4. 各参数详细解释

bash

docker network create --subnet=172.19.0.0/16 --gateway=172.19.0.1 app_net
  • docker network create:创建新网络

  • --subnet=172.19.0.0/16

    • 172.19.0.0:网络地址

    • /16:子网掩码(255.255.0.0)

    • 可用 IP:172.19.0.1 - 172.19.255.254

  • --gateway=172.19.0.1:网关地址,通常是 .1

  • app_net:网络名称

实际应用场景

你的微服务架构:

text

app_net 网络 (172.19.0.0/16)
├── 172.19.0.2  - xxxxx             (地图服务)
├── 172.19.0.3  -  xxxxxxx          (管理后台)
├── 172.19.0.4  - nginx_db          (Web服务器)
├── 172.19.0.5  - redis             (缓存)
├── 172.19.0.6  - rabbitmq          (消息队列)
├── 172.19.0.7  - xxx
├── 172.19.0.8  - xxxx
├── 172.19.0.9  -  xxx
└── 172.19.0.50 - xxxx  (你的新服务)

网络通信优势:

  1. 服务发现:容器间可以直接用容器名通信

    bash

    # 在 syrwff_server_v1 容器中可以直接访问
    ping redis
    ping rabbitmq
  2. 静态 IP 保证:每次重启容器 IP 不变

  3. 网络隔离:与其他 Docker 网络隔离,更安全

CIDR 表示法详解

/16 的含义:

  • IP 地址:32位二进制数

  • /16:前16位是网络号,后16位是主机号

  • 172.19.0.0/16 = 172.19.×××.×××

常见子网划分:

  • /24:255.255.255.0,254个主机(192.168.1.0/24)

  • /16:255.255.0.0,65,534个主机(172.19.0.0/16)

  • /8:255.0.0.0,约1677万个主机(10.0.0.0/8)

为什么选择 172.19.0.0/16?

  • 私有地址段:172.16.0.0 - 172.31.255.255 是专用于内网的

  • 足够大的空间:65,534个IP,适合微服务架构

  • 避免冲突:不与公网IP冲突

更多推荐