🐳

【追記あり】Dockerイメージの保存先を変更する

2022/12/23に公開

追記(2023.04.14)

4.16.3を使うと回避できるとの情報あり(未確認)

https://github.com/docker/for-win/issues/13294#issuecomment-1496581226

こちらからダウンロードできる

https://docs.docker.com/desktop/release-notes/#4163

追記(2023.03.27)

ジャンクションを作る方法で保存先を変更できた。
https://stackoverflow.com/a/66340577

まず、Dockerをアンインストールし、C:\ProgramData\DockerC:\Users\<ユーザ名>\AppData\Local\Dockerフォルダを削除

配置したいドライブにフォルダを作成
(例:D:\Data\Docker\ProgramData_Docker, D:\Data\Docker\AppData_Local_Docker

ジャンクションを作成

管理者権限のコマンドプロンプトで実行
mklink /j C:\Users\<ユーザ名>\AppData\Local\Docker D:\Data\Docker\ProgramData_Docker 
mklink /j C:\ProgramData\Docker D:\Data\Docker\AppData_Local_Docker

インストール先にDドライブを指定してDockerをインストール

start /w "" "Docker Desktop Installer.exe" install --installation-dir=D:\Docker

インストール先が変わってdocker.exeにパスが通らなくなるので、D:\Docker\resources\binをPATH環境変数に追加しておく

追記(2023.03.16)

最近、イメージの保存先を変えてもデフォルトに戻る現象が発生しているらしい

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

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

自分の環境でも保存先がデフォルトに戻っていた。

DDの設定画面を見ると「Disk image location」の項目があり(前もあった?)、C:\Users\ユーザー名\AppData\Local\Docker\wslに設定されていた。

「Browse」を押すとフォルダを選択できて場所が変更できそうだったが、フォルダを指定して再起動するとこのフォルダがもとに戻ってしまう

はじめに

Dockerを使ってイメージをビルドしたりして遊んでいると、知らず知らずのうちにCドライブを圧迫してしまっている。そんな状態でdocker buildをすると、Windows側のシステムメッセージで「空き領域がありません」と怒られてしまう。空いたドライブに保存先を変更する。

手順

環境

  • Windows 10

デフォルトの保存先

イメージやコンテナ

%LocalAppData%\Docker\wsl\data\ext4.vhdx

37.9GBくらい(めちゃ使ってる!)

Dockerエンジン

%LocalAppData%\Docker\wsl\distro\ext4.vhdx

127MBくらい

これらの保存先を、Dドライブに移す。

Docker Desktop for Windowsの停止

起動している場合は、システムトレイからクジラマークを右クリックして「Quit Docker Desktop」を選択し、停止させる。

PowerShell上でdocker-desktop-datadocker-desktopが停止したかを確認

❯ wsl -l -v
  NAME                   STATE           VERSION
  docker-desktop-data    Stopped         2
  docker-desktop         Stopped         2

保存先フォルダ作成

Dドライブに置きたいので、Dドライブの適当な場所にフォルダを作成する。
以下の場所に作成。

Dockerデータエクスポート

作成したフォルダにエクスポートする。

❯ wsl --export docker-desktop .\docker-desktop\docker-desktop.tar
❯ wsl --export docker-desktop-data .\docker-desktop-data\docker-desktop-data.tar

以前の保存先の設定を解除

❯ wsl --unregister docker-desktop
登録を解除しています...
❯ wsl --unregister docker-desktop-data
登録を解除しています...

ここまで実行すると、wsl -l -vでWSL環境のリストを表示したときにdocker-desktopdocker-desktop-dataが表示されなくなる。

出力したtarイメージをインポート

--version 2を指定することでWSL2としてインポートする。

# wsl --import <名前> <インストール先> <tarファイル>
❯ wsl --import docker-desktop .\docker-desktop\ .\docker-desktop\docker-desktop.tar --version 2
❯ wsl --import docker-desktop-data .\docker-desktop-data\ .\docker-desktop-data\docker-desktop-data.tar --version 2

<インストール先>に指定した場所でtarファイルが解凍され、vhdxファイルが配置される。

もう一度wsl -l -vで確認すると、インポートした名前で一覧に表示されている。

❯ wsl -l -v
  NAME                   STATE           VERSION
  docker-desktop-data    Stopped         2
  docker-desktop         Stopped         2

不要なファイルを削除

残す必要も無ければ、インポートに使ったtarファイルを削除しておく。

del .\docker-desktop.tar
❯ del .\docker-desktop-data.tar

また、変更前のパス%LocalAppData%\Docker\wsl\以下にあったもともとのボリュームファイル(.vhdx)は、wsl --unregisterを実行した時点で削除される。

最後に

何回か同じようなことやってるような気がするのは、多分Dockerの調子が悪くて再インストールすると、保存先が元通りになっているからだと思う。
今後は再インストールしたときも保存先がどこになっているか気をつけよう。

Discussion