Docker & Hyper-V占用port問題
這個占用port的問題困擾我好久

Docker & Hyper-V占用port問題

在window下用docker desktop有時候遇上port被莫名佔用 用指令netstat -ano | findstr xxx查詢xxx埠被誰佔用卻又顯示沒有

原來是因為在window下用docker需要依賴hyper-v技術, 而這個hyper-v每次都會隨機搶走一部分tcp埠,使用命令可以得知應避開的範圍:

# powershell / cmd
netsh interface ipv4 show excludedportrange protocol=tcp

如果避不開就手動叫Hyper-V讓路

  1. 關閉hyper-v

    # powershell / cmd
    dism.exe /Online /Disable-Feature:Microsoft-Hyper-V
    
  2. 配置ipv4動態埠 / 或者配置需要的埠不被佔用

    # powershell / cmd 管理員許可權
    # start 起始埠  num 表示可用埠數     按自己的需求來
    netsh int ipv4 set dynamicport tcp start=30000 num=16383
    // 叫他去用30000以後的阜
    
    # 排除ipv4動態埠佔用 startport 起始埠 numberofports 埠數
    netsh int ipv4 add excludedportrange protocol=tcp startport=50051 numberofports=1
    // 或是指定端口50051為要讓路的
    
  3. 重新啟動hyper-v

    dism.exe /Online /Enable-Feature:Microsoft-Hyper-V /All
    

Reference

https://github.com/docker/for-win/issues/3171#issuecomment-459205576


上次修改於 2021-10-15