admin 管理员组文章数量: 1184232
Docker子网冲突解决方案及配置说明
问题描述
公司现有子网为
172.19.0.0/24
,某研发在使用docker的时候总是会有连不上的情况,排查发现在未配置 Docker 配置文件时,其默认创建的网络可能随机使用
172.17.0.0/16
至
172.31.0.0/16
范围内的子网,存在以下风险:
-
Docker 若分配
172.19.0.0/16子网会覆盖公司的172.19.0.0/24网络。 - 导致 IP 地址冲突,引发网络通信异常。
解决方案
通过配置
daemon.json
实现:
-
指定默认网桥子网docker0
(
bip), -
限制其他网络的地址池范围
(
default-address-pools)
1. 修改
daemon.json
文件
{"bip":"192.168.8.1/24","default-address-pools":[{"base":"172.10.0.0/16","size":24}]}2. 关键配置解释
(1)
bip
- 默认网桥子网
-
作用
:控制
docker0桥接网络的子网。 -
正确写法
:
"bip":"192.168.8.1/24"// 必须指定网关 IP(而非网段) -
错误写法
:
"bip":"192.168.8.0/24"// Docker 不会自动分配网关,需显式指定
(2)
default-address-pools
- 其他网络地址池
-
作用
:限制用户自定义网络(
bridge、overlay)的子网范围。 -
参数说明
:
base: 基础网段(172.10.0.0/16表示允许分配172.10.0.0~172.10.255.0子网)size: 每个子网掩码位数(24表示每个子网为/24格式,例如172.10.5.0/24)
3. 清理旧网络 :若已有冲突网络,需先清理:
docker network prune
WARNING! This will remove all custom networks not used by at least one container.
Are you sure you want to continue? [y/N] y
4. 重启 Docker 服务
systemctl restart docker5. 验证配置
检查默认网桥 :
ip addr show docker0 |grep inet # 输出示例:inet 192.168.8.1/24测试新网络子网分配 :
docker network create test-1 docker network create test-2 docker network create test-3 docker network create test-4 docker network create test-5 docker network create test-6 docker network inspect `docker network ls|grep bridge |awk'{print $2}'`|grep Subnet # 输出示例:"Subnet":"192.168.8.0/24""Subnet":"172.10.0.0/24""Subnet":"172.10.1.0/24""Subnet":"172.10.2.0/24""Subnet":"172.10.3.0/24""Subnet":"172.10.4.0/24""Subnet":"172.10.5.0/24"
注意事项
- 如果是使用docker-compose 去运行容器,建议先创建容器网络,docker-compose 文件里使用创建的容器网络
docker network create -d bridge --subnet "10.22.33.0/24" --gateway "10.22.33.1" srebro
version: '3'
services:
redis:
image: redis:7.4.1
container_name: redis
networks:
- srebro
restart: always
command: redis-server --requirepass srebro.cn --port 6379 --appendonly yes --dbfilename dump.rd --dir /data --timeout 0 --save 900 1 --save 300 10 --save 60 10000
environment:
TZ: 'Asia/Shanghai'
volumes:
- /home/application/Database/redis/data:/data
- /home/application/Database/redis/logs:/logs
- /etc/localtime:/etc/localtime:ro
ports:
- 6379:6379
healthcheck:
test: ["CMD", "redis-cli", "-h", "127.0.0.1", "-p", "6379", "-a", " srebro.cn", "ping"]
interval: 30s
retries: 3
start_period: 30s
timeout: 10s
networks:
srebro:
external: true
总结
通过强制指定
bip
和
default-address-pools
,Docker 的子网分配将严格限制在以下范围:
-
默认网桥:
192.168.8.0/24 -
其他网络:
172.10.0.0/24,172.10.1.0/24, … ,172.10.255.0/24
彻底避免与公司子网
172.19.0.0/24
的冲突。
版权声明:本文标题:新手指南:用daemon.json配置docker IP段,解决子网冲突问题! 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1773666043a3564568.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论