Windows10运行Docker容器报端口不可用超时错误如何解决
Windows 10 Docker 随机端口转发超时报错解决
问题表现
运行Docker容器时随机在不同服务上触发以下报错,对应服务此前均可正常启动,删除容器后重新构建无法修复:
Cannot start service SERVICE_NAME: Ports are not available: unable to list exposed ports: Get "http://unix/forwards/list": context deadline exceeded (Client.Timeout exceeded while awaiting headers)
解决步骤(按操作成本从低到高排序)
- 右键任务栏Docker图标,选择「Restart」等待Docker完全重启完成(任务栏图标停止转动进入稳定状态),再重新启动容器,大部分偶发的端口转发模块卡死问题可通过该操作解决。
- 若重启Docker无效,以管理员身份打开PowerShell或命令提示符,执行
netsh winsock reset,执行完成后重启电脑,再启动Docker测试。该命令用于重置Windows网络套接字配置,可修复绝大多数因系统网络栈损坏导致的Docker unix套接字通信超时问题。 - 检查系统端口保留冲突:管理员身份执行
netsh interface ipv4 show excludedportrange protocol=tcp,查看容器需要映射的端口是否落在系统动态保留的端口段内。如果存在冲突,可以临时执行net stop winnat关闭Windows网络地址转换服务,启动容器后再执行net start winnat恢复服务,也可以直接修改容器的端口映射配置避开保留段。 - 切换Docker运行后端测试:打开Docker Desktop设置页,找到「Use the WSL 2 based engine」选项,若当前为开启状态则关闭切换到Hyper-V后端,若当前为Hyper-V后端则开启切换到WSL2后端,保存设置等待Docker重启后再测试,部分版本Docker的后端端口转发组件存在随机卡死bug,切换后端可绕过该问题。
- 以上操作均无效时,卸载当前Docker Desktop,手动删除
C:\ProgramData\Docker目录以及当前用户目录下的.docker文件夹(操作前提前备份需要留存的镜像、容器数据),重新安装最新稳定版Docker Desktop即可。
内容的提问来源于stack exchange,提问作者tasneem almoallem
相关产品推荐
相关产品推荐

