😭
WSLの環境構築の闇
対象読者
- WindowsでWSLで開発したい方
- WSL + Dockerの環境構築で詰まった方
まえがき
WSL + Windowsでの開発環境構築は沼です!
環境
- Windows10 Pro
- version - 22H2
- WSL2
- distro - Ubuntu
- Docker Desktop for windows
- version - 4.24.0
事象1
コンテナが再起動を繰り返す
- "General > ""Use WSL 2 based engine" を指定した Docker Desktop for WindowsでMySQLのコンテナが起動してもすぐに "Restarting" になる
- 同じ環境で同じように起動したNodeJsサーバ正常に "Running" になる
- NodeJsサーバにWindows側からpostmanやcURLでリクエストを送ると正常にレスポンスが返る
事象2
以下のエラーでコンテナが起動しない
docker: Error response from daemon: bind source path does not exist: \wsl.localhost\ubuntu2004-1\run\user\0\wayland-0.
- マウント周りで不明なファイルが作られている
- Windows上からもWSL上からも削除できない
- WSL上でパーミッションを確認すると???になっている
事象3
docker-compose.ymlのvolumesの初期化スクリプトがマウントされない
volumes:
- ./db/my.cnf:/etc/mysql/conf.d/my.cnf
- ./db/sql:/docker-entrypoint-initdb.d
解決法
- 以下のコマンドで、WSLのディストリビューションを変更する
wsl --list
# 結果
#
# Ubuntu(既定)
# docker-desktop
# docker-desktop-data
wsl -s docker-desktop-data
- docker desktopを再起動する
原因
- マウント関係の権限
- WSL側からWindowsのファイルシステムにアクセスできない
まとめ
新しく参画したプロジェクトの開発環境構築で詰まったポイントの解決法を記事にまとめました。
同じくWindowsでWSLで開発したいという方の参考になれば幸いです。
Discussion