- 同步:账单能对上卖家实收时按实收核对(差额归零、订单实付/实收列显示实收值),并写入标识「订单实付按卖家实收核对」 - 页面:新增兜底备注「差额待核实」(可筛选);该标识在「匹配原因」列展示并纳入筛选与联动计数 - 列名:「订单实付金额」→「订单实付/实收金额」;「未匹配原因」→「匹配原因」 - 新增 scripts/docker-fix-start.ps1(Docker 因僵尸 socket 起不来时一键清理并启动)
73 lines
2.6 KiB
PowerShell
73 lines
2.6 KiB
PowerShell
<#
|
||
修复 Docker Desktop 起不来(引擎一直 Stopped、反复弹「恢复出厂设置」)的问题。
|
||
|
||
根因:Docker Desktop 崩溃后会留下僵尸 unix socket 文件(例:
|
||
%LOCALAPPDATA%\Docker\run\dockerInference
|
||
%LOCALAPPDATA%\docker-secrets-engine\engine.sock
|
||
这类文件在 Windows 上删不掉("系统无法访问此文件"),下次启动时
|
||
Docker 后端"先删后建"失败 → 再次崩溃 → 又弹重置框,形成死循环。
|
||
|
||
处理:把上面两个目录整体改名(不删除,可恢复),让 Docker 重新创建。
|
||
|
||
用法:
|
||
pwsh -NoProfile -File scripts/docker-fix-start.ps1 # 只清理
|
||
pwsh -NoProfile -File scripts/docker-fix-start.ps1 -Start # 清理并启动,等引擎就绪
|
||
#>
|
||
param(
|
||
[switch]$Start,
|
||
[int]$TimeoutSeconds = 240
|
||
)
|
||
|
||
$ErrorActionPreference = 'Stop'
|
||
|
||
$apps = Get-Process -ErrorAction SilentlyContinue |
|
||
Where-Object { $_.ProcessName -in @('Docker Desktop', 'com.docker.backend', 'docker') }
|
||
if ($apps) {
|
||
$apps | Stop-Process -Force -ErrorAction SilentlyContinue
|
||
Write-Host ('已结束 Docker 相关进程:' + (($apps | Select-Object -ExpandProperty ProcessName -Unique) -join ', '))
|
||
Start-Sleep -Seconds 3
|
||
}
|
||
|
||
$stamp = Get-Date -Format 'yyyyMMdd-HHmmss'
|
||
$targets = @(
|
||
(Join-Path $env:LOCALAPPDATA 'Docker\run'),
|
||
(Join-Path $env:LOCALAPPDATA 'docker-secrets-engine')
|
||
)
|
||
|
||
foreach ($path in $targets) {
|
||
if (-not (Test-Path -LiteralPath $path)) {
|
||
Write-Host "无需处理(不存在):$path"
|
||
continue
|
||
}
|
||
$leaf = "$(Split-Path -Leaf $path).stale-$stamp"
|
||
try {
|
||
Rename-Item -LiteralPath $path -NewName $leaf -ErrorAction Stop
|
||
Write-Host "已改名:$path -> $leaf"
|
||
} catch {
|
||
Write-Host "改名失败:$path($($_.Exception.Message))"
|
||
}
|
||
}
|
||
|
||
if (-not $Start) {
|
||
Write-Host '清理完成。加 -Start 可直接启动 Docker Desktop 并等待引擎就绪。'
|
||
return
|
||
}
|
||
|
||
$exe = 'C:\Program Files\Docker\Docker\Docker Desktop.exe'
|
||
if (-not (Test-Path -LiteralPath $exe)) { throw "找不到 Docker Desktop:$exe" }
|
||
Start-Process -FilePath $exe
|
||
Write-Host '已启动 Docker Desktop,等待引擎就绪…'
|
||
|
||
$deadline = (Get-Date).AddSeconds($TimeoutSeconds)
|
||
while ((Get-Date) -lt $deadline) {
|
||
Start-Sleep -Seconds 10
|
||
$version = (docker version --format '{{.Server.Version}}' 2>$null)
|
||
if ($version) {
|
||
Write-Host "引擎已就绪:$version"
|
||
exit 0
|
||
}
|
||
}
|
||
|
||
Write-Host '超时:引擎仍未就绪。请查看 Docker Desktop 窗口的错误提示(不要点「恢复出厂设置」)。'
|
||
exit 1
|