问题根源是windows defender防火墙拦截了docker容器端口访问,需手动添加入站规则:执行new-netfirewallrule命令放行8080端口并指定private/domain配置,再用netsh强制启用规则,最后telnet验证连通性。

Windows 11系统中Docker容器明明启动了、端口也加了-p参数,但浏览器访问localhost:8080却显示“无法连接”,问题大概率卡在Windows Defender防火墙这一关——它默认会拦截非白名单应用的入站连接,而Docker Desktop的后台服务(dockerd.exe)或容器流量常被静默丢弃。
确认防火墙当前是否启用并拦截了目标端口
打开PowerShell(管理员权限),执行:Get-NetFirewallProfile | Format-List Name,Enabled。重点看Domain、Private、Public三档配置里Enabled是否为True;只要任一档开启,就必须检查该档下的规则。
运行:Get-NetFirewallRule -DisplayName "*Docker*" | Where-Object {$_.Enabled -eq "True"}。如果返回空,说明Docker相关规则根本没生效——别信安装时的自动配置,Win11 23H2之后版本普遍不创建有效入站规则。
手动添加允许指定端口的入站规则
方法一:用PowerShell一行命令快速放行(推荐)
执行:New-NetFirewallRule -DisplayName "Docker Port 8080" -Direction Inbound -Protocol TCP -LocalPort 8080 -Action Allow -Profile Private,Domain。这一步直接绕过图形界面,把8080端口加入私有/域网络的白名单;【必须指定-Profile,否则默认只作用于Public档,而本地回环访问走的是Private档】。
方法二:通过Windows安全中心图形界面补漏
进入「开始 → 设置 → 隐私和安全性 → Windows 安全中心 → 防火墙和网络保护」→ 点击当前网络类型(通常是“专用网络”)→ 「允许应用通过防火墙」→ 「更改设置」→ 「允许其他应用」→ 点击「浏览」,定位到C:\Program Files\Docker\Docker\resources\dockerd.exe → 添加 → 勾选「专用」→ 确定。注意:这里添加的是进程,不是端口;若容器服务由其他进程(如wsl.exe)承载,此法可能无效。
验证规则是否真正生效
第一步:查规则是否存在且启用
运行:Get-NetFirewallRule -DisplayName "Docker Port 8080" | Select-Object DisplayName,Enabled,Profile。输出中Enabled必须是True,Profile字段应含Private。
第二步:强制刷新防火墙策略缓存
执行:netsh advfirewall firewall set rule name="Docker Port 8080" new enable=yes。Windows防火墙有时会缓存旧状态,仅靠PowerShell创建不保证即时生效,这条命令能触达底层策略引擎。
第三步:用telnet实测端口通断(需先启用Telnet客户端)
在另一个PowerShell窗口执行:telnet localhost 8080。如果屏幕变黑无报错,说明连接已建立——防火墙放行成功;如果弹出“无法连接到主机”或闪退,说明规则未生效或端口根本没监听。











