【Docker】 端口占用问题:Windows 系统 80 端口无权限绑定详细解决教程--Error response from daemon: Ports are not available:
一、错误现象
运行Docker容器时出现以下错误:
Error response from daemon: Ports are not available: exposing port TCP 0.0.0.0:80 -> 127.0.0.1:0: listen tcp 0.0.0.0:80: bind: An attempt was made to access a socket in a way forbidden by its access permissions.
此错误表明 80 端口被系统或其他进程占用,或存在权限限制。
二、解决方法一览(请按照个人情况对照详细步骤进行处理)
-
管理员身份运行各种指令
-
重启 Windows NAT 网络驱动
-
检查并释放被占用的 80 端口
-
临时更换 Docker 映射端口
三、详细步骤
1. 管理员身份运行各种指令
Docker Desktop 采用管理员身份运行;CMD或者Powershell利用管理员身份运行。
2. 重启 Windows NAT 网络驱动
Docker 依赖 Windows NAT 网络驱动,重启可释放被锁定的端口。
操作步骤:
- 以管理员身份打开命令提示符(CMD 或 PowerShell)。
- 依次执行以下命令:
-
net stop winnatnet start winnat
-
-
重启 Docker 服务后重试。
3. 检查并释放被占用的 80 端口
3.1 查找占用 80 端口的进程
- 按 Win + R,输入 cmd 打开命令提示符。
- 执行以下命令:
-
netstat -ano | findstr :80
-
- 输出示例:
-
TCP 0.0.0.0:80 0.0.0.0:0 LISTENING 4
-
-
最后一列为 PID(进程 ID)此处
PID=4
表示被系统进程占用,若不为4则未系统进程占用。
3.2 终止占用进程
① 处理非系统进程占用(PID不为4)
- 如果 PID 不是 4(如 PID=1234):
- 输出示例:
-
TCP 0.0.0.0:80 0.0.0.0:0 LISTENING 1234
-
- 则输入代码终止进程
-
taskkill /PID 1234 /F
-
- 强制终止进程树(谨慎操作):
-
taskkill /PID 1234 /T /F
-
② 处理系统进程占用(PID=4)
- 查看任务管理器 > 详细信息 发现被System系统进程占用
-
- 命令提示符中输入以下代码,查看当前的http服务状态
-
netsh http show servicestate
-
例如我的进程就被ID:5904、2173、12528、22556占用。
-
- 在任务管理器找到上面提到的进程,结束进程
-
- 注意若出现桌面栏消失,需要重启Windows资源管理器
-
4. 临时更换 Docker 端口映射
若需快速验证容器功能,可更换端口映射:
docker run -p 8080:80 your_image
将宿主机的 8080 端口映射到容器的 80 端口。
持久化配置:若需长期使用 80 端口,建议彻底关闭冲突服务或调整服务端口。
四、成功运行
通过以上步骤,可解决 99% 的 Windows 系统 Docker 端口绑定权限问题。
经过上述解决再次运行 Docker 即可成功运行✅
转载吱一声~