こちらの記事の補足です。
Docker Desktopをアンインストールする際に、一部の設定ファイルや内部データが残ってしまいます。このまま上記の手順を進めると、身に覚えの無い設定に邪魔をされてエラーになることがあるので注意です。
Docker Desktopのアンインストール
まず、通常のアンインストール手順について解説します。
- スタートメニューから「プログラムの追加と削除」
- 設定の「インストールされているアプリ」が立ち上がります
- その中のDocker Desktopを選択しアンインストールします
これでアンインストールに成功します。Docker DesktopのGUIが消え、CLIでもDockerが使えなくなるはずです。
残った痕跡
基本的に影響が残るのはWindows側です。WSL側はあまり気にすることなく使えます。
Docker Desktopを使った形跡はC:\ProgramData\Docker
にあります。
イメージやコンテナー
作成したimageやcontainerなどはその直下の同名フォルダに保存されます。この領域が残っていれば、Docker Desktopをアンインストールし別途Dockerエンジンを再インストールした際に、以前の作業から続けることができます。
Windowsコンテナは非常に重いので再ビルドはできるだけしたくありません。なのでデータが残ることは基本的にメリットではあるのですが、不都合がある場合には消しておきましょう。
設定ファイル
設定ファイルの編集には管理者権限が必要になります。
デーモンの設定
C:\ProgramData\Docker\config\daemon.json
に設定が書き込まれています。特に以下の記述がある場合には注意してください。
{
"hosts": ["npipe:////./pipe/docker_engine_windows"]
}
名前が紛らわしいのですが、Docker Desktopを使うことを意味しています。この設定が残っているとDockerを起動できないエラーが起こるため、この部分の記述を削除します。
vimを入れている場合は簡単に削除できますが、そうでない場合でも一応編集ができます。Powershellで以下のように実行してください。
# 1. JSON ファイルを読み込む
$jsonPath = "C:\ProgramData\docker\config\daemon.json"
$json = Get-Content $jsonPath | ConvertFrom-Json
# 2. 不要な "hosts" を削除する
$json.PSObject.Properties.Remove("hosts")
# 3. 編集後の内容を保存する
$json | ConvertTo-Json -Depth 10 | Set-Content $jsonPath -Encoding UTF8
そして改めて実行ホストの設定をします。powershellで以下コマンドを実行します。
dockerd -H npipe://
認証の設定
$USER_PROFILE\.docker\config.json
に設定が残っています。ここで、以下のような記述が残っている場合があります。
{
"credsStore": "desktop"
}
これはdocker loginの認証の際にdocker desktopを一旦通るよ、という意味です。これが残ったままですとエラーの原因になるので、削除します。
以下を参考に代替のセキュリティ対策をしてください。
dockerコマンドの実行権限
Docker Desktopの時は気にする必要はありませんでしたが、WindowsにDockerEngineを直接インストールした場合は、dockerを操作するのに管理者権限が必要になります。