バッチファイルの置き場所を WSL2 経由でマウントして Docker コンテナを起動する方法


これは何?

バッチファイルをダブルクリックして、Docker for Windows で起動する際に、そのバッチファイルの場所を WSL2 ボリュームとしてマウントする方法を提案します。

想定読者

  • WSL2 版 docker を導入している人
  • docker 起動時に volume をマウントしたときに、性能が悪いと警告された人
  • docker 起動するときにいちいち wsl を起動するのが面倒くさい人

結論

バッチファイル名のコンテナイメージを起動する例を示します。バッチファイル名を変えると、起動するコンテナイメージが変わります。

buildpack-deps.bat
@setlocal
@set "WORK=/root/workspace"

@cd /d "%~dp0"
@set "IMG=%~n0"

@if "%~0" == "%~f0" set "pause_if_error=@if errorlevel 1 pause"

@for %%i in ( "%CD%" ) do @set "WSL2CD=%%~di"
@for %%i in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do @call set "WSL2CD=%%WSL2CD:%%~i=%%~i%%"
@for %%i in ( "%CD%" ) do @call set "WSL2CD=%%WSL2CD:~0,-1%%%%~pnxi"
@set "WSL2CD=/mnt/%WSL2CD:\=/%"

wsl -e docker run -it --rm -w "%WORK%" -v "%WSL2CD%:%WORK%" %IMG% %*
%pause_if_error%
@exit /b %errorlevel%

マウントポイントは @set "WORK=/root/workspace" に直書きなので、適宜書き換えてください。
image を固定する場合、 @set "IMG=%~n0" を書き換えてください。
wsl の distro を指定していませんので、指定したい方は適当に wsl の option を追加してください。

確認環境

Windows10 1909
Docker version 19.03.13, build 4484c46d9d

解説

docker を起動する際、 wsl コマンドを経由します。
ボリュームは wsl 上の path を指定します。
WSL2CD の操作をごにょごにょやっているのは、 windows path から WSL のパスに変換する処理です。

これで、警告が消えてスッキリ!

参考