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

WSL中Docker容器内Caddy服务无法从Windows访问的排查求助

问题:WSL2镜像模式下Windows无法访问Docker容器8080端口

环境配置

  • WSL2运行Linux环境,.wslconfig配置如下:
[wsl2]
networkingMode=mirrored
  • 部署服务:
    • 直接运行在WSL Linux中、监听80端口的linux-app
    • 以Docker容器运行(Caddy)、监听8080端口的docker-app,采用双宿主网络模式,其中一个网络为internal(用于反向代理)

过往正常表现

此前一年时间内,跨系统访问均正常:

# Linux端访问正常
$ chromium http://localhost:80      # works fine on linux
$ chromium http://localhost:8080    # works fine on linux

# Windows端访问正常
C:\start edge http://localhost:80   # works fine on Windows 
C:\start edge http://localhost:8080 # works fine on Windows 

确认docker-compose.yml的端口映射配置正确。

当前异常情况

全新部署相同环境(应用、镜像、docker-compose.yml完全一致)后,出现端口访问差异:

# Linux端访问仍正常
$ chromium http://localhost:80      # works fine on linux
$ chromium http://localhost:8080    # works fine on linux

# Windows端访问8080端口超时
C:\start edge http://localhost:80   # works fine on Windows 
C:\start edge http://localhost:8080 # timeout,错误码ERR_CONNECTION_TIMED_OUT
  • Windows下Edge、curl均在21秒后超时,curl --verbose无额外有效信息
  • Caddy已开启详细日志,但未收到来自Windows的请求

现有限制与排查进展

无Windows管理员权限,仅可执行Get-NetFirewallRule -Enabled True命令,不清楚需筛选的关键词


排查思路与解决方案

1. 验证Docker端口映射的绑定地址

确认docker-compose.yml中8080端口的映射绑定到0.0.0.0而非仅127.0.0.1,示例配置:

ports:
  - "0.0.0.0:8080:8080"

镜像模式下对绑定地址敏感度更高,需确保容器端口对外开放到所有接口。

2. 检查WSL2端口转发状态

在WSL Linux中执行以下命令,确认8080端口是否被正确转发:

sudo ss -tulpn | grep 8080

查看输出是否存在0.0.0.0:8080的监听记录,且对应进程为docker-proxy。

3. 无权限下排查Windows防火墙规则

使用以下PowerShell命令筛选相关规则:

# 筛选含WSL关键词的启用规则
Get-NetFirewallRule -Enabled True | Where-Object { $_.DisplayName -match "WSL" }

# 筛选含Docker关键词的启用规则
Get-NetFirewallRule -Enabled True | Where-Object { $_.DisplayName -match "Docker" }

# 筛选与8080端口相关的入站规则
Get-NetFirewallPortFilter | Where-Object { $_.LocalPort -eq 8080 } | Get-NetFirewallRule | Where-Object { $_.Enabled -eq $true }

若未找到允许8080端口入站的规则,需联系管理员添加对应规则。

4. 测试WSL IP直连

先在WSL中获取自身IP:

hostname -I

然后在Windows中执行:

curl http://<WSL_IP>:8080

若能访问,说明localhost端口转发存在问题,可尝试重启WSL:

wsl --shutdown

之后重新启动WSL即可。

5. 检查Docker容器网络配置

执行以下命令查看Caddy容器的网络详情:

docker inspect <caddy_container_name> | grep -A 20 "Networks"

确认非internal网络的Gateway和IPAddress为WSL可访问的地址,且容器端口绑定到该网络接口。


内容的提问来源于stack exchange,提问作者Patrick Fromberg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 08:03:22