错误情景
- 系统:
- window11
- docker run in wsl
- 操作:
错误诱因
Window 默认预留的 TCP 动态端口范围与需要启动的服务端口冲突导致。
所以查不来的原因是端口确实未使用,但是保留。
解决方案
查看windows保留端口序列是否在冲突范围,默认应该是1024开始,步长为13977。所以我nacos的8848、9848都在里面
查看保留端口序列1
| netsh int ipv4 show dynamicport tcp
|
修改端口默认起始与步长,设置为自己不常用的区间。
- start: 起始值
- num: 长度
修改保留端口序列1
| netsh int ipv4 set dynamicport tcp start=30000 num=13977
|
结尾
分享一个如果端口存在就kill端口的命令 e.g. killIf 8848
killIf1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| function killIf { param ( [Parameter(Mandatory = $true)] [int]$Port,
[switch]$l )
try { # 获取 netstat 输出并过滤与端口相关的信息 $processInfo = netstat -ano | Select-String -Pattern ":\b${Port}\b"
# 判空处理 if ($null -eq $processInfo -or $processInfo.Length -eq 0) { Write-Host "端口 $Port 未被占用。" -ForegroundColor Yellow Write-Host "提示:无法使用该端口,请检查是否有其他服务在使用,或尝试重启电脑。" -ForegroundColor Green return }
# 提取唯一的进程ID $processIds = $processInfo | ForEach-Object { ($_ -split '\s+')[-1] } | Select-Object -Unique
foreach ($ProcId in $processIds) { try { # 确认 PID 是否为有效的数字 if ($ProcId -match '^\d+$') { if ($l) { Write-Host "端口 $Port 存在进程号: ${ProcId}" -ForegroundColor Yellow } # 尝试终止进程 taskkill /PID $ProcId /F Write-Host "已终止进程 ${ProcId}, 释放端口 $Port 完毕。" -ForegroundColor Green } else { Write-Host "不正确的进程号: ${ProcId}" -ForegroundColor Red } } catch { Write-Host "终止进程 ${ProcId} 失败: $($_.Exception.Message)" -ForegroundColor Red } } } catch { Write-Host "发生错误: $($_.Exception.Message)" -ForegroundColor Red } }
|
它是一个PowerShell 脚本(扩展名为 .ps1),放到 $PROFILE
这个变量下面就行,直接在命令行输入 $PROFILE
有地址。