WSL2上で前にpullしたイメージが消えてしまった(ように見えた)問題
問題発生
先日、Kaggle 用の機械学習環境をローカルに構築しようと、WSL2 上の Ubuntu に gcr.io/kaggle-gpu-images/python:latest イメージを pull しました。
$ docker pull gcr.io/kaggle-gpu-images/python:latest
その日は以下のコマンドによってコンテナを起動し、Jupyter Notebook が使えることを確認できました。
$ docker run -itd --gpus all -p 8888:8888 -v "$(pwd)"/target:/home --name kaggle gcr.io/kaggle-gpu-images/python /bin/bash
また、docker images
でも、kaggle-gpu-images/python イメージが存在していることも確認できてました。
ところが、環境構築を行った日から数日ぶりにこの環境を利用しようと Docker desktop を開き、同様の docker run コマンドを実行したところ、 kaggle-gpu-images/python がローカル内で見つからず、再度、イメージの pull から始まってしまいました。
ディスク容量などを確認しても、数日前のイメージを pull した後とほとんど変わっていなかったため、データとしては存在していそう1です。
しかし、Docker Desktop や WSL2 上の docker images コマンドから kaggle-gpu-images/python:latest を探してみても、たしかにイメージは見つかりませんでした。
解決方法
Docker Desktop を止めた状態で、WSL2 を再起動すると、docker images コマンドで kaggle-gpu-images/python:latest が見つかるようになりました。
問題発生の原因
環境構築当初は Docker Desktop を使用せず、WSL2 にインストールされた Docker のみを使用していました。
Docker Desktop と WSL2 上の Docker はそれぞれ独立した環境ですが、Docker Desktop の Enable integration with my default WSL distro が有効になっている状態で Docker Desktop が起動している場合、WSL2 上の Docker も Docker Desktop の環境を参照するようです。
そのため、Docker Desktop を起動している状態で WSL2 上の Docker を操作すると、Docker Desktop の環境を参照するため、イメージが見つからないという問題が発生したそうです。
今回は Docker Desktop を停止することによって解決しましたが、Docker Desktop の Settings から、Resources/WSL Integration を選択し、Enable integration with my default WSL distro を無効にすることでも、WSL2 からの Docker Desktop の環境参照を防ぐことができました。
私がダウンロードをした時点で kaggle-gpu-images/python:latest は 44.8GB のサイズがありました。
↩︎というか、44.8GBは流石に使いすぎじゃない...?
— のりまき (@onegaspine) August 8, 2024
こんなもんか...? pic.twitter.com/X4kiK5j9U1