코딩하는 임초얀

[Docker] 설치 시 오류 본문

카테고리 없음

[Docker] 설치 시 오류

초얀 2022. 7. 21. 22:58

2020.09.15


Docker로 각종 작업을 해보려고 설치를 한 번 했다가, 잘 안 되는 것 같아 삭제를 했었다.
문제는 정상적인 방법으로 삭제한 게 아니라 관련된 폴더를 대충 삭제하려고 했다는 것이다.

이미 프로세스에서 돌아가고 있던 몇몇 파일들이 삭제가 덜 되었고,
그 상태에서 재설치를 하려고 하니 계속 에러가 났다.


정말 여러 방법들을 시도했어서 이제 어떤 순서로 해결했는지는 잘 기억이 나지 않지만,
내가 시도한 방법 중 몇 개를 여기에 적어본다.


1. 재부팅

재부팅은 정말 중요하다. 아래의 방법을 하나씩 사용했는데도 잘 안 되면 재부팅을 하고 다시 설치를 시도해보자.


2. cmd로 강제 삭제

https://stackoverflow.com/questions/42161471/how-to-uninstall-docker-machine-under-windows-10/51167323#51167323

1. cmd를 관리자 권한으로 실행한다.

2. C:\Program Files\Docker로 이동한다.

3. 아래의 command를 순서대로 입력한다.

takeown /R /F *
ICACLS * /T /Q /C /RESET
notepad.exe

4. 메모장이 열리면 아래의 코드를 붙여넣고 C:\Program Files\Docker.ps1이라는 파일로 저장한다.

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" }

5. cmd 밖으로 나와서 C:\Program Files\Docker 폴더에 들어간 후 .ps1 파일을 우클릭하여 PowerShell에서 실행을 누른다.


3. 레지스트리 에디터

1. 레지스트리 편집기를 연다.
2. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall 폴더에 간다.
3. 하위 폴더를 하나씩 들어다보면서 Docker Desktop이라는 걸 찾은 후 삭제한다.


4. Hyper-V Manager

https://github.com/docker/for-win/issues/2348

1. Hyper-V 관리자를 연다.
2. Desktop을 선택한 후 Docker Desktop VM을 삭제한다.


5. 리소스 모니터

https://stackoverflow.com/questions/53464007/docker-installation-process-cant-complete-due-to-file-being-in-use-elsewhere

1. 작업 관리자를 연다.
2. 성능 탭을 클릭한다.
3. 하단의 리소스 모니터 열기를 클릭한다.
4. 연결된 핸들을 클릭한다.
5. docker를 검색한다.
6. 나오는 모든 프로세스를 우클릭하여 종료한다.


나는 이 모든 걸 다 한 후 재부팅했더니 설치가 정상적으로 되었다.

정말 힘들었다.

Comments