👩💻
DevContainer を開くと Git が使えない問題
はじめに
Laravel Sail + VSCode DevContainer + WSL2 の環境構築後、
VSCode を DevContainer モードで開くと Git コマンドが使えない問題が発生しました。
通常は一度 「Reopen in WSL」 して Git 操作を行いますが、毎回切り替えるのは手間なので、
DevContainer 内でも Git / VSCode の Source Control を使えるようにする
ことを目的として設定を整理しました。
症状
- VSCode 左下が「Dev Container: ...」の状態でターミナルを開くとgitのコマンドが使えない
- WSL ターミナルに切り替えられない
root@XXXXX:/var/www/html# fatal: not a git repository (or any of the parent directories):
原因
- DevContainer では コンテナ内の Linux が動いているだけ
→ WSL の Gitの認証設定を参照しない - DevContainer のパス設定でbind mount が正しく設定されていない
→WSLのフォルダ と一致していない
解決
1. devcontainer.jsonに以下を記載する
"workspaceFolder": "/var/www/html",
"mounts": [
"source=${localWorkspaceFolder},target=/var/www/html,type=bind"
],
| 設定値 | 意味 |
|---|---|
| workspaceFolder | VSCode がコンテナ内で開く作業ディレクトリを指定(※Laravel Sailでは/var/www/html) |
| mounts | ホストのフォルダとコンテナのフォルダを同期(マウント)する設定 |
| source=${localWorkspaceFolder} | ホスト側(WSL)のディレクトリ |
| target=/var/www/html | コンテナ側(DevContainer)の作業ディレクトリ |
| type=bind | マウントの設定 |
※WSL → DevContainer へのマウントをしている
2. 「Rebuild Container」ボタンを押下しコンテナを再作成する

3. DevContainerでgitのコマンドが使用できること、Source Controlからコミットできることを確認

おわりに
DevContainer は「新しい Linux を Docker 上に作る」仕組みなので、そのままだと WSL の Git やファイルを認識しません。
今回の mounts 設定を入れておくことで、
- Git 操作を DevContainer 内に統一できる
- WSL とコンテナの「二重管理」が解消される
- Laravel Sail と DevContainer を併用しやすくなる
というメリットが得られます。
参考URL
Discussion