只有累積,沒有奇蹟

2019年8月5日 星期一

[Docker] Windows 10 中移除 Docker for Windows 的另一種方式

問題 
這幾天公司筆電出了點小問題,因此需要將筆電中部分軟體做移除,在進行 Docker for windows 移除時意外的發現卡在預設的 Docker for windows 移除畫面非常久,重試幾次都是跑 10 分鐘以上都未進行到下一步,且移除畫面未提供任何進度,意外中發現不同的方式可以移除 Windows 上的 Docker,且移除速度較預設移除方式來的更快,這篇就來分享如何透過 非一般方式 移除 Docker,若有謬誤或是更快的方法歡迎留言一起討論。

解決方案 
一般移除方式都是透過 Windows 控制台內建的移除程式,但其實在 Docker 官方上也有提供 Powershell 語法可以讓使用 Windows 10 的開發者完全將 Docker 移除 : How to completely remove Docker in Windows 10,執行語法如下
    $ErrorActionPreference = "SilentlyContinue"

    kill -force -processname 'Docker for Windows', com.docker.db, vpnkit, com.docker.proxy, com.docker.9pdb, moby-diag-dl, dockerd

    try {
        ./MobyLinux.ps1 -Destroy
    } Catch {}

    $service = Get-WmiObject -Class Win32_Service -Filter "Name='com.docker.service'"
    if ($service) { $service.StopService() }
    if ($service) { $service.Delete() }
    Start-Sleep -s 5
    Remove-Item -Recurse -Force "~/AppData/Local/Docker"
    Remove-Item -Recurse -Force "~/AppData/Roaming/Docker"
    if (Test-Path "C:\ProgramData\Docker") { takeown.exe /F "C:\ProgramData\Docker" /R /A /D Y }
    if (Test-Path "C:\ProgramData\Docker") { icacls "C:\ProgramData\Docker\" /T /C /grant Administrators:F }
    Remove-Item -Recurse -Force "C:\ProgramData\Docker"
    Remove-Item -Recurse -Force "C:\Program Files\Docker"
    Remove-Item -Recurse -Force "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Docker"
    Remove-Item -Force "C:\Users\Public\Desktop\Docker for Windows.lnk"
    Get-ChildItem HKLM:\software\microsoft\windows\currentversion\uninstall | % {Get-ItemProperty $_.PSPath}  | ? { $_.DisplayName -eq "Docker" } | Remove-Item -Recurse -Force
    Get-ChildItem HKLM:\software\classes\installer\products | % {Get-ItemProperty $_.pspath} | ? { $_.ProductName -eq "Docker" } | Remove-Item -Recurse -Force
    Get-Item 'HKLM:\software\Docker Inc.' | Remove-Item -Recurse -Force
    Get-ItemProperty HKCU:\software\microsoft\windows\currentversion\Run -name "Docker for Windows" | Remove-Item -Recurse -Force
    #Get-ItemProperty HKCU:\software\microsoft\windows\currentversion\UFH\SHC | ForEach-Object {Get-ItemProperty $_.PSPath} | Where-Object { $_.ToString().Contains("Docker for Windows.exe") } | Remove-Item -Recurse -Force $_.PSPath
    #Get-ItemProperty HKCU:\software\microsoft\windows\currentversion\UFH\SHC | Where-Object { $(Get-ItemPropertyValue $_) -Contains "Docker" }
且嘗試執行之後執行效率比原本的快很多 ( 原本的一直卡在第一步不動阿阿阿 XD),但也有一個小缺點,就是移除完畢之後不會將在 Windows 開始中的 Docker for window 執行 ICON 移除,如果要立即重新安裝的話會讓 Windows 誤判 Docker 還存在造成安裝失敗,解法也很簡單就是從 Windows 開始找到 Docker 之後,點選 Docker for windows 執行檔,Windows 系統找不到相關應用程式執行檔後在選擇移除,即可順利進行重新安裝 Docker for windows 的動作。 

在 Docker 的 Github 上也有提供另一種解法,就是直接到 Windows 註冊表找到 Docker 註冊檔並刪掉他 (相當暴力的方法阿),由於第一種方式已經順利的將 Docker for Win 移除,這裡先做筆記將此方式記錄下來方便日後有可能使用到
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
除了 Docker 官方的移除方法,這篇文章也提供給大家另一種方式進行移除 Docker for win,如果跟我有一樣的需求可以參考嘗試看看 :) 

參考
How to completely remove Docker in Windows 10
How to remove Docker for Windows if installer is broken

2 則留言:

Copyright © m@rcus 學習筆記 | Powered by Blogger

Design by Anders Noren | Blogger Theme by NewBloggerThemes.com