結論
WSL2 上のDockerコンテナでBind(バインド)させる場合、Windows上のフォルダをwsl形式のパスで指定すること
課題
WSL2 上のDockerコンテナ起動にて「--mount type=bind」でBind先を指定してコンテナを起動するが、
期待したフォルダをマウントしていない。コンテナは起動しているがBind先のフォルダが見えない。
実行方法
BindするWindows環境
Windows上にBind先フォルダを作成する。
中にはhello1.txtを作成する。
C:\dockerBind
hello1.txt
wslコンソール上からwslpathコマンドで、wslが読み込める形式のパスが取れる。
/mnt/c配下にディレクトリは作成されます。
注意:ダブルクォーテーション忘れると失敗します
$ wslpath "C:\dockerBind"
/mnt/c/dockerBind
Bind付きコンテナを実行
--mountをつけてsourceにwslpath "C:\dockerBind"
を指定する。
バッククォートで囲むことで、バッククォート内の処理結果がコマンドに投入されます。
$ docker container run --rm -d --name bct --mount type=bind,source=`wslpath "C:\do
ckerBind"`,target=/bindcont alpine:3.10.3 tail -f /dev/null
77d1027748fb32017fafc4ac8d41832ead720f48451f4af01f972eb5cc4c347a
動作検証
lsでbindされていることを確認
$ docker container exec bct ls -l /bindcont
total 0
-rwxrwxrwx 1 1000 1000 0 Sep 23 06:58 hello1.txt
touchでファイル生成ができることを確認
$ docker container exec bct touch /bindcont/hello2.txt
$ docker container exec bct ls -l /bindcont
total 0
-rwxrwxrwx 1 1000 1000 0 Sep 23 06:58 hello1.txt
-rwxrwxrwx 1 1000 1000 0 Sep 23 07:35 hello2.txt
docker container inspect で設定内容を確認
$ docker container inspect bct
[
【前略】
"Mounts": [
{
"Type": "bind",
"Source": "/mnt/c/dockerBind",
"Destination": "/bindcont",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
【後略】
]
理由
問題の理由はわかりません。
WSL上のDockerデーモンがWSL上のファイルを見ることができないのは、腑に落ちない。
コンテナとしてはネットワーク越しのmountをしているようなものなので、成功しそうに思うのだけど。
参考