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

WSL2环境下Docker运行镜像时端口未在宿主机发布如何解决?

问题截图

问题原因
  • WSL2默认采用NAT网络架构,若Docker Desktop开启WSL2集成后端口转发规则未自动同步到Windows宿主机,会导致端口无法被宿主机直接访问
  • Windows防火墙拦截了WSL2网卡的入站流量,对应端口的访问请求被阻止
  • 启动Docker容器时仅绑定了127.0.0.1地址,仅对WSL2内部回环地址生效,未暴露到外部网卡
  • WSL2 IP为动态分配,每次重启WSL2后IP会变更,之前手动配置的端口转发规则会自动失效
  • 容器内部的服务仅监听了容器内的127.0.0.1回环地址,未监听0.0.0.0,外部请求无法送达服务进程
解决方案

修正Docker端口绑定规则

启动容器时指定绑定所有网卡,命令示例:
docker run -p 0.0.0.0:宿主机端口:容器端口 镜像名称
若使用Docker Compose,修改ports配置:

ports:
  - "0.0.0.0:宿主机端口:容器端口"

手动配置WSL2到Windows的端口转发

  1. 在WSL2终端执行ip addr show eth0,获取inet字段下的WSL2内网IP,示例格式为172.x.x.x
  2. 打开Windows管理员权限PowerShell,执行端口转发命令:
    netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=宿主机端口 connectaddress=上述WSL2IP connectport=容器映射端口
  3. 放行Windows防火墙对应端口规则:
    New-NetFirewallRule -DisplayName "WSL2端口放行" -Direction Inbound -LocalPort 宿主机端口 -Protocol TCP -Action Allow

修改容器内服务监听地址

确认容器内运行的业务服务监听地址为0.0.0.0,而非127.0.0.1,不同服务修改方式不同:

  • Nginx需修改配置文件中listen对应的绑定地址
  • Node/Java等后端服务需指定启动host为0.0.0.0

重置WSL2网络配置

如果之前开启过WSL2镜像网络模式,会导致端口转发异常,打开Windows路径下%UserProfile%\.wslconfig文件,删除或注释以下配置:

[experimental]
networkingMode=mirrored

修改完成后执行wsl --shutdown重启WSL2即可生效。

重置Docker WSL2集成

打开Docker Desktop设置页,进入Resources->WSL Integration,关闭对应WSL发行版的集成开关,点击应用后重新打开开关再次应用,重启Docker后重试即可。

内容的提问来源于stack exchange,提问作者F.P

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 22:48:00