科技 · 实用指南
Docker 提示网络有 active endpoints?删除前先查清每个所有者
锁定准确网络 ID,纳入已停止容器,并把标签映射到所属 Compose 项目或 Swarm 服务。先处理所有者,再核验同一个网络 ID。

“Network has active endpoints”表示 Docker 仍在准确的网络对象上看到至少一个连接。它可能来自运行或已停止容器、另一个 Compose 项目,或会重新创建任务的 Swarm 服务。
不要先 prune、强制断开或重启 daemon。记录网络 ID、driver、scope 和标签,枚举连接容器,映射所有者,再处理所有者并核验同一个网络 ID。
固定准确的网络身份
复制完整报错并用 docker network inspect 把名称解析为一个 ID。记录 Name、ID、Driver、Scope、Internal、Attachable 和 Labels,后续始终使用这个 ID。
清理前导出 inspect 结果。相似名称要比较 ID 与 Compose 标签;生产 overlay 与本地 bridge 的所有者和变更窗口不同。
建立 endpoint 所有者账本
读取 Containers 映射,并用 docker ps -a --filter network=<ID>输出容器 ID、名称、状态、标签和网络。-a 很关键:停止容器不等于 endpoint 已删除。
记录 com.docker.compose.project、service 与 one-off 标签;没有标签时核创建方式。陌生 endpoint 未经应用所有者确认不要断开。
处理所有者,而不是症状
Compose 要用创建容器的准确 project identity 和文件集合。--remove-orphans 前先看目标;“不在当前模型”不等于可随意删除。external 网络由独立所有者决定。
Swarm 要找声明 overlay 的 service 或 stack,在变更计划内更新、缩容或删除。只删 task 容器不是闭环,因为 orchestrator 会恢复期望状态。
区分拆卸竞态与持续异常
若失败后同一 ID 已无 endpoint,短暂等待 teardown 稳定,确认没有新 task,再窄化重试一次。相同名称的新 ID 是另一个对象,必须重新审计。
若同一 ID 持续空映射却仍报 endpoint,收集 daemon 日志、Engine 版本、driver 与复现。之后才按主机策略考虑受控重启;重启是可用性动作。
验证服务健康并关闭根因
所有者退出后再次 inspect 同一 ID。只有账本为空且所有者计划允许,才删除网络;同时确认外部共享网络和剩余服务仍有预期连接。
把根因记录为 stopped container、Compose 项目错配、orphan、共享 external 网络、Swarm 期望状态、竞态或 daemon/driver 异常,修对应 runbook。
