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 imagesを実行した結果、kaggle-gpu-images/pythonイメージの存在を確認できる

ところが、環境構築を行った日から数日ぶりにこの環境を利用しようと Docker desktop を開き、同様の docker run コマンドを実行したところ、 kaggle-gpu-images/python がローカル内で見つからず、再度、イメージの pull から始まってしまいました。 docker runの結果、imageがnot found

ディスク容量などを確認しても、数日前のイメージを pull した後とほとんど変わっていなかったため、データとしては存在していそう1です。

しかし、Docker Desktop や WSL2 上の docker images コマンドから kaggle-gpu-images/python:latest を探してみても、たしかにイメージは見つかりませんでした。

解決方法

Docker Desktop を止めた状態で、WSL2 を再起動すると、docker images コマンドで kaggle-gpu-images/python:latest が見つかるようになりました。 kaggle-gpu-images/python:latestがdocker imagesで見つかる

問題発生の原因

環境構築当初は 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 の環境参照を防ぐことができました。 docker desktopの設定からWSL Integrationを無効にする


  1. 私がダウンロードをした時点で kaggle-gpu-images/python:latest は 44.8GB のサイズがありました。

     ↩︎