Docker を使用しながら Windows 上で WSL を使用しています。
私はこの解決策を採用しています
そこで、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 コマンドではファイルは表示されません。
一方、コマンドプロンプトで同じことをやってみました。
docker run -it -v C:\Users\<username>\Desktop\mounted_folder:/new_dir <image> bash
その後、ls コマンドで「file_at_host」ファイルを見つけることができます。
どうしてこんなことが起きたのでしょうか?
また、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」ファイルが存在することがわかりました。
上の画像のように、「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
/mnt
Windowsファイルをマウントするには、上記と同じ形式を使用します。つまり、先頭のバインドマウントを含むフルパスを指定します。
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
マウントされたフォルダを次のように指定すると、
/mnt/c/Users/'username'/desktop/mounted_folder
次のようなパスでGUI上のフォルダを確認できます。
C:\Users\'username'\Desktop\mounted_folder
前者の場合、Windows のコマンドラインでマウントされたフォルダーを確認するには、コマンドプロンプトではなく PowerShell を使用する必要があります。