科技 · 实用指南
Docker 提示“端口已分配”?改动前先证明所有者
冲突可能来自另一个容器、宿主进程、重复的 Compose 映射或守护进程状态。先固定准确的宿主 IP、协议和端口,再只改已验证的所有者。

“端口已分配”只说明 Docker 无法取得一个宿主套接字元组,并不能证明是谁占用,也不代表应该终止全部监听或删除无关容器。
先写下宿主 IP、协议和端口,例如 0.0.0.0、TCP、8080。用同一元组分别核对 Docker 映射与宿主监听,再选择修复。
固定准确元组和 Docker 上下文
复制完整错误,记录 docker context、Compose 项目与文件、宿主 IP、宿主端口、容器端口以及 TCP 或 UDP。不要只写“8080”。
渲染有效 Compose 配置或保留原 docker run 命令,检查重复映射、覆盖、replica 或两个服务请求同一宿主元组。
找出该端口的全部 Docker 映射
用准确端口和协议运行 docker ps -a 的 publish 过滤,再检查返回容器和项目标签。相关 Docker context 都要查,不能只看当前 Compose 项目。
其他项目的运行容器是真实所有者;确认工作负载和依赖后,才停止或改映射。
独立证明宿主监听者
Linux 用 ss 查询监听 TCP/UDP 并显示进程;Windows 用 LocalPort 过滤 Get-NetTCPConnection,再核对 LocalAddress、State 和 OwningProcess。
把 PID 映射到服务或程序并确认用途。docker-proxy 或 dockerd 通常指回容器映射,数据库、Web 服务或 IDE 则是宿主所有者。
分类后再选择修复
容器所有者只修改对应 Compose/run 映射并重建该服务;宿主进程则重新配置或有意停止精确服务;重复配置则删掉重复项后再次渲染。
若 Docker 报冲突但容器映射与宿主监听均为空,保存日志、版本、context、网络模式和失败命令。把重启或升级当成有边界的诊断。
用双侧退出测试收尾
修复后再次执行 Docker 映射与宿主监听清单。只有预期所有者应持有准确的宿主 IP、协议和端口,其他项目不得变化。
启动受影响服务,检查发布映射,从预期网络位置测试预期地址并保存退出码。
