WSL上のDocker。WSLでWindows10に該当フォルダをマウントしたい

WSL上のDocker。WSLでWindows10に該当フォルダをマウントしたい

Docker を使用しながら Windows 上で WSL を使用しています。

私はこの解決策を採用しています

https://stackoverflow.com/questions/50540721/docker-toolbox-error-response-from-daemon-invalid-mode-root-docker

そこで、WSL 上の Docker を使用して、「mounted_folder」を「file_at_host」ファイルでマウントしようとしました。次のように...

docker run -it -v //C/Users/<username>/Desktop/mounted_folder://new_dir <image> bash 
docker run -it -v /C/Users/<username>/Desktop/mounted_folder:/new_dir <image> bash

しかし、次の図に示すように、ls コマンドではファイルは表示されません。

CONTAINERにフォルダをマウントする方法

一方、コマンドプロンプトで同じことをやってみました。

docker run -it -v C:\Users\<username>\Desktop\mounted_folder:/new_dir <image> bash

その後、ls コマンドで「file_at_host」ファイルを見つけることができます。

CONTAINERにフォルダをマウントする方法

どうしてこんなことが起きたのでしょうか?

また、docker がフォルダーをマウントするときに参照するフォルダーはどれですか?

Windows GUI でそのフォルダーを見つけることはできますか?

同様に、WSL で docker によるフォルダのマウントを試し、コンテナ内に「something.ipynb」ファイルを作成しました。

docker run -p 8888:8888 -v /c/Users/<username>/Desktop/ds_python:/work --name my-lab <image>

また、Windows GUI 上の該当フォルダ「ds_python」にあるはずの「something.ipynb」ファイルを見つけることができませんでした。

しかし、WSL で Docker で「Desktop」をマウントしようとしたところ、「something.ipynb」ファイルが存在することがわかりました。

CONTAINERにフォルダをマウントする方法

上の画像のように、「something.ipynb」ファイルが表示されますが、Windows GUI「C:\Users\Desktop\ds_python」では見つかりませんでした。

どうすればこの問題を解決できるでしょうか?

「C:\Users\Desktop」と「/c/Users//Desktop/」は違いますか?

では、Windows で後者を表示するにはどうすればよいでしょうか?

また、Docker による WSL を使用して Windows 上の該当フォルダーをマウントするにはどうすればよいでしょうか?

答え1

WSL2を使用している場合、Windowsドライブは/mntエンドポイントで公開されます。

 ls -lah /mnt
total 12K
drwxr-xr-x 10 root   root   4.0K Nov 13 13:13 .
drwxr-xr-x 17 root   root   4.0K Dec 12 11:12 ..
drwxrwxrwx  1 sathya sathya  512 Dec  6 12:47 c
drwxrwxrwx  1 sathya sathya 4.0K Dec  2 10:31 d
drwxrwxrwx  1 sathya sathya 4.0K Dec  2 10:31 e
drwxrwxrwx  1 sathya sathya 4.0K Dec  2 10:31 f
drwxrwxrwx  1 sathya sathya  512 Dec  2 10:31 g
drwxrwxrwx  1 sathya sathya 4.0K Dec  2 10:31 h
drwxrwxrwx  2 root   root   4.0K Nov 13 13:13 i
drwxrwxrwt  2 root   root     40 Dec 12 11:12 wsl


/mntWindowsファイルをマウントするには、上記と同じ形式を使用します。つまり、先頭のバインドマウントを含むフルパスを指定します。

docker run -it -v /mnt/c:/host/c alpine sh

これにより、C ドライブがコンテナ内の /host/c にマウントされます。

ls -lah /host/c

drwxrwxrwx    1 1000     1001         512 Dec 15 07:42 .
drwxr-xr-x    3 root     root        4.0K Dec 15 10:35 ..
lrwxrwxrwx    1 1000     1001          12 Sep 29  2018 Documents and Settings -> /mnt/c/Users
dr-xr-xr-x    1 1000     1001         512 Dec  9 16:54 Program Files
dr-xr-xr-x    1 1000     1001         512 Nov 13 11:03 Program Files (x86)
drwxrwxrwx    1 1000     1001         512 Nov  7 13:26 ProgramData
dr-xr-xr-x    1 1000     1001         512 Oct  2 08:39 Users
dr-xr-xr-x    1 1000     1001         512 Dec 15 07:43 Windows

答え2

まず、マウントされたフォルダを指定する際に採用した Stack Overflow の解決策は古い情報であり、WSL 用ではなく Docker Toolbox に関するものです。

それで、それは私の状況には当てはまらないことがわかりました。

次に、WSL でマウントされたフォルダーを次のように指定する必要があります...

docker run -it -v /mnt/c/Users/'username'/desktop/mounted_folder:/new_dir <image> bash

3番目に、マウントされたフォルダを次のように指定すると、

/c/Users/'username'/desktop/mounted_folder

次のようなパスでGUI上のフォルダを確認できます。

\\wsl$\Ubuntu\c\Users\'username'\desktop\mounted_folder

エクスプローラー結果画像

\\wsl$\Ubuntu~WSL のディストリビューションは Ubuntu だったので、と入力する必要があります。ただし、Ubuntu-20.04 がインストールされています。

の結果wsl --list -v

wsl --list -v の結果のスクリーンショット

マウントされたフォルダを次のように指定すると、

/mnt/c/Users/'username'/desktop/mounted_folder

次のようなパスでGUI上のフォルダを確認できます。

C:\Users\'username'\Desktop\mounted_folder

前者の場合、Windows のコマンドラインでマウントされたフォルダーを確認するには、コマンドプロンプトではなく PowerShell を使用する必要があります。

コマンドプロンプトエラー

関連情報