记录一次使用docker部署dify网段冲突的问题
- [1. 情况描述](#1. 情况描述)
- [2. 问题根源](#2. 问题根源)
- [3. 解决方案](#3. 解决方案)
1. 情况描述
-
有一台服务器,一个路由器,一个本地Windows电脑;
-
服务器连接到路由器中;路由器本身在内网的IP为
172.19.xxx.xxx;服务器在路由器子网下的IP为192.168.xxx.xxx; -
服务器通过路由器的端口映射将
22端口暴露出来,本地Windows电脑通过172.19.xxx.xxx:22使用SSH连接到服务器; -
docker部署dify,命令为
docker compose up -d,服务全部启动后,SSH连接突然断开,怎么连都连不上; -
查询各种资料无果,最后AI提出网段冲突的问题,遂排查。

2. 问题根源
-
确实是docker的网段冲突问题;
-
不是简单的网段冲突问题,而是docker误以为本地网段为192.168.xxx.xxx,于是直接使用默认的172.17.xxx.xxx网段;
-
由于当前已经存在172.17.xxx.xxx、172.18.xxx.xxx、172.20.xxx.xxx的容器,docker在启动dify时自动顺延至172.19.xxx.xxx网段,导致docker网络地址与路由器网关地址冲突,于是SSH连接断开;
注:
为什么已经存在其他没有冲突的网段(17,18,20)?因为这台服务器之前是没有接路由器的,直接暴露在内网中,IP是172.19.xxx.xxx,docker在部署其他容器时自动避开了冲突网段;
docker是会自动检查网段冲突 的:与AI的表述不同,实践上来看,docker确实会自动检查网段冲突。
3. 解决方案
修改/etc/docker/daemon.json,添加:
json
{
"default-address-pools": [
{
"base": "172.80.0.0/16",
"size": 24
}
]
}
其中172.80.0.0/16可以是其他不冲突的自定义网段。
