Watch at Ease看见世界,读懂生活。

科技 · 实用指南

Docker 提示网络有 active endpoints?删除前先查清每个所有者

锁定准确网络 ID,纳入已停止容器,并把标签映射到所属 Compose 项目或 Swarm 服务。先处理所有者,再核验同一个网络 ID。

将 Docker 网络身份映射到容器、Compose 或 Swarm 所有者的原创图。
原创示意图:先识别网络、endpoint 所有者与目标动作。 Watch at Ease

“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。

区分 standalone、Compose、Swarm 与拆卸竞态的原创决策图。
原创示意图:在所有权边界修复,不把强制全局清理当首步。 Watch at Ease