docker-composeで共有ディスクの指定をして起動しようとするとエラー

事象

以下の記事を参考にdocker-composeでJupyter Labを起動させたい。
qiita.com

しかしながら、以下の様なエラーが発生してしまい、起動しない。
(一部ディレクトリ変更はしているが、その部分のエラーではない)

C:\dockerfile\JupyterLab>docker-compose up
Creating network "jupyterlab_default" with the default driver
Creating jupyterlab_jupyterlab_1 ... error

ERROR: for jupyterlab_jupyterlab_1  Cannot start service jupyterlab: error while mounting volume '/var/lib/docker/volumes/jupyterlab_jupyterlab-dir/_data': 
failed to mount local volume: mount C:\c\jupyterlab:/var/lib/docker/volumes/jupyterlab_jupyterlab-dir/_data, flags: 0x1000: no such file or directory

ERROR: for jupyterlab  Cannot start service jupyterlab: error while mounting volume '/var/lib/docker/volumes/jupyterlab_jupyterlab-dir/_data': 
failed to mount local volume: mount C:\c\jupyterlab:/var/lib/docker/volumes/jupyterlab_jupyterlab-dir/_data, flags: 0x1000: no such file or directory
ERROR: Encountered errors while bringing up the project.

発生している環境

  • Windows10 pro
  • WSL2
  • Docker Desktop for Windows

原因

不明(調べきれなかった)

対応方法

パスを直接指定する事にした

[docker-compose.yml]

version: '3'
services:
  jupyterlab:
(中略)
    volumes:
#      - jupyterlab-dir:/home/JupyterLab/codes
       - c:\jupyterlab:/home/JupyterLab/codes
(以下略)
共有ディスクとして設定した内容確認方法
ボリューム一覧
docker volume ls
ボリューム詳細
docker volume inspect ボリューム名
ボリューム削除
docker volume rm ボリューム名

上記の例であれば、jupyterlab-dirというボリューム名が作成されているので、削除する。
なお、設定したボリュームの中身更新したい場合は、一度削除した方が良さげ。

分からなかった事

volumesで動くマシンと動かないマシンの違い

実は直接パスを指定しなくても動く端末もあった。
しかし、別の端末では同じエラーが発生し続けた。
dockerのバージョンから始まり、色々見比べたが差異が見つけれなかった。。
オプション指定とか今はしたい訳でもないので、一旦忘れる。

C:\c\jupyterlabとドライブレターが複数指定されている件

volumesでするとどうしてもドライブレターが二度表示され、c:\cフォルダが必要であった。
これも解決できておらず、動くマシンではc:\cフォルダを掘っていた。

driver_optsの"type: none"と"o: bind"の意味

docker-composeのマニュアルや仕様には、その様な記載は見つけれなかった。
Compose Specification(仕様) — Docker-docs-ja 24.0 ドキュメント
github.com
しかし、Issueの対応に同じ記載を見つける事はでき、またどちらかを削ると動かなかった。
github.com

その他

  • WSL2の場合は、Docker Desktop for WindowsにShared Drivesという設定は存在しない。
  • Docker Desktop for Windowsをインストールしていても、docker-compose使うならあまり意味がない。コマンドを憶えるか、バッチファイルを作成して叩いて利用した方が良い。Docker Desktop for Windowsは起動・停止位の意味合いで利用すると割り切る。
  • Anacondaを使わなかったのは、ライセンス問題があるし、ちょこっと集計する程度に使えればいい位なので。

qiita.com