You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WSL2中Docker .NET容器绑定80端口失败:地址已被占用

解决WSL2下Docker容器绑定80端口提示占用的问题

针对你遇到的Docker容器启动时Failed to bind to address http://[::]:80: address already in use错误,结合WSL2+Docker Desktop的环境,给出以下排查和解决步骤:

1. 排查Windows主机侧的80端口占用

WSL2的网络端口通过Windows主机转发,WSL内的lsof无法检测到Windows侧的端口占用。打开管理员权限的命令提示符,执行:

netstat -ano | findstr ":80"

找到输出中对应的PID,再执行:

tasklist /fi "pid eq [你的PID]"

即可查看占用80端口的Windows程序(比如IIS、Windows Update服务、第三方代理工具等),停止该程序后再尝试启动容器。

2. 修复WSL2端口转发冲突

Windows的端口转发规则可能出现异常,导致WSL的80端口被误占。打开管理员权限的PowerShell,执行:

Get-NetNatSession | Where-Object {$_.ExternalPort -eq 80}

如果有返回结果,说明存在转发冲突。执行以下命令关闭并重启WSL:

wsl --shutdown

重新打开WSL后再启动容器。

3. 重置Docker网络配置

Docker的网络缓存可能残留端口占用记录,执行以下命令清理无用网络:

docker network prune

然后重启Docker Desktop,再尝试启动容器。

4. 调整ASP.NET Core的绑定地址

修改Docker配置中的ASPNETCORE_URLS为:

- ASPNETCORE_URLS=https://+:443;http://0.0.0.0:80

明确绑定IPv4地址,避免IPv6的[::]:80端口冲突——部分Windows服务可能默认占用IPv6的80端口,但WSL内无法检测到。

5. 检查Windows HTTP服务占用

Windows的http.sys服务可能占用80端口,打开管理员命令提示符执行:

net stop http /y

强制停止该服务后尝试启动容器。如果后续需要恢复依赖服务,可以通过services.msc找到相关服务(比如World Wide Web Publishing Service、Windows Remote Management等)调整启动类型。

内容的提问来源于stack exchange,提问作者Ben Thomson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 08:57:15