これは何?
バッチファイルをダブルクリックして、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 のパスに変換する処理です。
これで、警告が消えてスッキリ!