結論
OSの環境変数からCOMPOSE_CONVERT_WINDOWS_PATHSを削除することで、Volumeマウントが正常に機能するようになります。
発生した問題
これまで Docker Desktop を利用してコンテナ開発を行っていましたが、Rancher Desktop への切り替えを実施しました。Docker Desktop のアンインストールと Rancher Desktop のインストールは問題なく完了しましたが、フロントエンド開発用コンテナを起動した際、ホスト側ディレクトリがコンテナにマウントされないという事象が発生しました。
docker-compose.yml は以下の通りです。
services:
app:
build:
context: ./build/frontend
dockerfile: Dockerfile
ports:
- "3000:3000"
tty: true
volumes:
- ./app:/usr/src/app
command: ["sh"]
Docker Desktop 使用時は /usr/src/app に ./app が正しくマウントされていましたが、Rancher Desktop では /usr/src/app が空ディレクトリになっていました。
調査
docker inspect でコンテナ設定を確認すると、HostConfig.Binds が次のようになっていました。
"Binds": [
"/c/sample/app:/usr/src/app:rw"
]
Rancher Desktop は WSL2 上で動作しており、WSL2 では Windows の Cドライブは /mnt/c にマウントされます。したがって、期待する設定は以下のようになるはずです。
"Binds": [
"/mnt/c/sample/app:/usr/src/app:rw"
]
実際に rdctl shell で Rancher Desktop の仮想マシンに接続して確認すると、/c/sample/app という空ディレクトリが作られており、想定と異なるパスが設定されていることがわかりました。
原因
調査の結果、以下の GitHub Issue に辿り着きました。
https://github.com/rancher-sandbox/rancher-desktop/issues/8775
ここで指摘されていたのは、COMPOSE_CONVERT_WINDOWS_PATHS という環境変数の存在です。この変数は Docker Toolbox 時代のパス変換用に使われていたもので、Rancher Desktop では不要どころか誤ったパス変換を引き起こします。(思い返すと、過去にDocker Toolboxをインストールしたことがあり、その時の設定が残っていたようです。)
解決方法
Windows の環境変数から COMPOSE_CONVERT_WINDOWS_PATHS を削除すると、パス変換が正しく行われるようになり、Volumeマウントが正常に機能しました。
まとめ
- 症状: Rancher Desktop(Windows, WSL2)でVolumeマウントが空ディレクトリになる
- 原因: COMPOSE_CONVERT_WINDOWS_PATHS が古い仕様のパス変換を行っていた
- 対処: 環境変数から COMPOSE_CONVERT_WINDOWS_PATHS を削除する