原文發(fā)布于語雀
作為已經(jīng)使用了WSL1的用戶末荐,再等待win10 2004推送前,先開啟了hyper-v眶熬,搗鼓了一下開啟hyper-v的virtualbox。
萬萬沒想到娜氏,2004更新后,開啟本地開發(fā)的項(xiàng)目時(shí)贸弥,本地端口也遇到了占用。詭異的是狸涌,重啟之后部分端口恢復(fù)了最岗,再重啟,端口又被占用了般渡,似乎端口占用跟重啟有關(guān)。
查找問題
首先驯用,檢查端口占用
# powershell
netstat -ano | findstr ":8080"
沒有結(jié)果,意味著并不是有程序占用了端口记餐。
猜測(cè)可能是更新了win10 2004薇正,導(dǎo)致win10防火墻配置有變更,又檢查了一番win10防火墻挖腰,發(fā)現(xiàn)并沒有攔截或者端口禁用的配置。此時(shí)猴仑,我才想起好像先前開啟了hyper-v,最后搜索了一番疾渣,找到了出現(xiàn)問題的地方:
# powershell
# 查看系統(tǒng)默認(rèn)端口占用訪問
netsh int ipv4 show dynamicport tcp
協(xié)議 tcp 動(dòng)態(tài)端口范圍
---------------------------------
啟動(dòng)端口 : 1024
端口數(shù) : 13977
# 查看hyper-v啟動(dòng)后的保留端口范圍
netsh interface ipv4 show excludedportrange protocol=tcp
協(xié)議 tcp 端口排除范圍
開始端口 結(jié)束端口
---------- --------
1026 1125
1226 1325
1326 1425
1426 1525
1526 1625
2180 2279
...
# 通過這個(gè)可以查看被占用的項(xiàng)目端口是否在這個(gè)范圍內(nèi)
解決辦法
- 由于直接進(jìn)行第二步配置崖飘,會(huì)遇到程序占用(hyper-v占用),所以需要先關(guān)閉hyper-v坐漏, 可以win+s 快捷鍵搜索 “windows功能” 碧信,關(guān)閉hyper-v街夭,或者使用下列命令,然后重啟
# powershell / cmd
dism.exe /Online /Disable-Feature:Microsoft-Hyper-V
- 配置ipv4動(dòng)態(tài)端口 / 或者配置需要的端口不被占用
# powershell / cmd 管理員權(quán)限
# start 起始端口 num 表示可用端口數(shù) 按自己的需求來
netsh int ipv4 set dynamicport tcp start=30000 num=16383
# 排除ipv4動(dòng)態(tài)端口占用 startport 起始端口 numberofports 端口數(shù)
netsh int ipv4 add excludedportrange protocol=tcp startport=50051 numberofports=1
- 重啟hyper-v
命令或配置窗口(參考1
dism.exe /Online /Enable-Feature:Microsoft-Hyper-V /All
一頓操作后呈枉,原來被占用的端口就恢復(fù)了埃碱,又可以愉快的玩耍了(逃
Reference
https://github.com/docker/for-win/issues/3171#issuecomment-459205576