platform windows

WSLのUser ID(uid)について調べました。

参考ページ

環境

  • Windows 10 64ビット
  • Ubuntu 22.04.3 LTS (WSL2ディストリビューション)

WSLのUser ID

WSLのデフォルトユーザーのUser ID(uid)とGroup ID(gid)はともに 1000 です。
Ubuntu上で以下のように確認できます。(WSLデフォルトユーザー名がusernameのとき)

cat /etc/passwd
~略~
username:x:1000:1000:,,,:/home/username:/bin/bash

この記事を書くに至った経緯

LaravelアプリケーションをWSL上のDockerで開発中、php artisan make:~略~ で作ったファイルがWSL上で実行中のVSCodeで編集できませんでした。
理由は、Dockerコンテナに接続してファイルを作成するときはrootユーザーのためファイルの権限が -rw-r--r-- 1 root root になります。
しかしVSCodeではWSLのデフォルトユーザー(rootユーザーではない)でファイルを編集するため書き込み制限に引っかかるためです。
これを解決するにはDockerコンテナにWSLデフォルトユーザーとして接続すればいいのかなと思いました。

DockerコンテナにWSLデフォルトユーザーとして接続してみます。(1000 はWSLデフォルトユーザーのuid)

$ docker compose exec --user 1000 web bash

ファイルを作って権限を確認します。

$ php artisan make:command SendEmails

 INFO  Console command [app/Console/Commands/SendEmails.php] created successfully.

$ ls -l app/Console/Commands/SendEmails.php
-rw-r--r-- 1 1000 root ~略~

ファイルの権限が -rw-r--r-- 1 1000 root になりました。
Dockerコンテナから出てWSL上で確認します。(WSLデフォルトユーザー名が username のとき)

$ ls -l app/Console/Commands/SendEmails.php
-rw-r--r-- 1 username root ~略~

WSLデフォルトユーザーで書き込み可能になっていることが確認できました。
これでVSCodeから編集できます。(もっと他にいい方法がありそう)