本文介紹如何在局域網內訪問Windows服務器端口,特別是針對已安裝WSL環境并在其中運行Docker服務的情況。主要解決Docker服務向局域網開放端口的配置問題
步驟一:配置轉發
當你的應用程運行在WSL中時,需要執行此步驟。
在宿主機(windows)上執行下面的腳本轉發下列本地端口:
# 功能說明: 在局域網內開放本地端口
# 將本腳本 在 PowerShell中執行(管理員身份)# 定義要監聽、開放的端口列表
$ports = 7080, 8080, 8888, 9000, 9090, 5678
# 表示監聽地址, 0.0.0.0 表示匹配所有地址
$listenAddress = "0.0.0.0"
# 定義要轉發的地址
$connectAddress = "localhost"
# 重置舊的端口代理設置(如果需要)
iex "netsh interface portproxy reset"
# 遍歷端口數組
foreach ($port in $ports) {# 添加新的端口代理設置iex "netsh interface portproxy add v4tov4 listenport=$port listenaddress=$listenAddress connectport=$port connectaddress=$connectAddress"
}
# 展示轉發的端口列表
iex "netsh interface portproxy show all"
- 將內容保存為文件,命名為 expose_port.ps1
- 以管理員身份打開 PowerShell(右鍵“以管理員身份運行”)
- 為避免遇到權限問題,可以先運行:
Set-ExecutionPolicy RemoteSigned
然后選擇 Y
。
4. 切換到腳本所在目錄,例如:
cd E:\test
- 運行腳本:
.\expose_port.ps1
至此,端口轉發配置完了。
步驟二:防火墻設置
可以采用下面2種方式中的一種即可。
1. 直接關閉防火墻
如下圖,把公用網絡的防火墻關閉。
2. 配置入棧規則
? 打開控制面板,進入 Windows Defender 防火墻。
? 點擊左側的 高級設置。
? 在彈出的窗口中,選擇 入站規則,然后點擊右側的 新建規則。
? 選擇 端口 作為規則類型,點擊 下一步。
? 指定協議類型(TCP 或 UDP)以及需要開放的端口號,點擊 下一步。
? 選擇 允許連接,繼續點擊 下一步。
? 根據需要選擇規則適用的網絡類型(域、專用或公用),點擊 下一步。
? 為該規則命名并保存。
如上圖配置,開放了本地的7000-9999之間的端口。
完成后,指定端口將被防火墻允許訪問。
驗證
目標:在目標服務器(windows 11)中的wsl里(Ubuntu24.04)使用docker運行plantUML服務為例
先啟動服務:
docker run -d --restart always -p 7080:8080 plantuml/plantuml-server:jetty
啟動后會監聽7080端口:
說明:在wsl的docker里啟動時,對宿主機系統來說監聽的只是localhost地址,檢測如下(宿主機Powershell中執行):
此時需要按照步驟一配置轉發。
在執行完步驟一和步驟二后,就可以在局域網的其他機器上訪問該服務了。如:
總結
本文將指導您在局域網內訪問Windows服務器端口,重點針對已安裝WSL并運行Docker服務的情況。主要解決Docker服務向局域網開放端口的配置問題:
- 若服務運行在宿主機但監聽地址為localhost或127.0.0.1,需將監聽地址修改為0.0.0.0或內網IP
- 若服務運行在WSL中,需先執行步驟一建立端口映射
- 最后還需確保防火墻已開放相應端口