LoginSignup
2
3

More than 1 year has passed since last update.

WSL2 の Docker から Bind によるデータ永続化を行う場合のフォルダ指定

Posted at

結論

WSL2 上のDockerコンテナでBind(バインド)させる場合、Windows上のフォルダをwsl形式のパスで指定すること

課題

WSL2 上のDockerコンテナ起動にて「--mount type=bind」でBind先を指定してコンテナを起動するが、
期待したフォルダをマウントしていない。コンテナは起動しているがBind先のフォルダが見えない。

実行方法

BindするWindows環境

Windows上にBind先フォルダを作成する。
中にはhello1.txtを作成する。

BindさせるWindowsのパス
C:\dockerBind
  hello1.txt

wslコンソール上からwslpathコマンドで、wslが読み込める形式のパスが取れる。
/mnt/c配下にディレクトリは作成されます。
注意:ダブルクォーテーション忘れると失敗します

wslpathによるパスの読み替え
$ wslpath "C:\dockerBind"
/mnt/c/dockerBind

Bind付きコンテナを実行

--mountをつけてsourceにwslpath "C:\dockerBind"を指定する。
バッククォートで囲むことで、バッククォート内の処理結果がコマンドに投入されます。

Bind指定をつけてコンテナを起動
$ 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されていることを確認

Bindされて、hello1.txtがコンテナから表示できることを確認
$ 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をしているようなものなので、成功しそうに思うのだけど。

参考

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3