WSL2でDockerを使用する際に発生するパーミッション問題の解決方法

やまさん
2022-08-26
やまさん
2022-08-26
普段Windows環境で開発することがなくハマったポイントです。
WSL2でDockerを使用してRails等の環境を構築し、コンテナ内でファイルを作成するとコンテナ外から上書きできなくなるパーミッション問題が発生します。

解決方法は、WSL2とコンテナのUID、 GIDを合わせることで解消できます。

Dockerfileに以下を追加します。

ARG USERNAME=vscode
ARG USER_UID=1000
ARG USER_GID=$USER_UID

RUN groupadd --gid $USER_GID $USERNAME \
&& useradd --uid $USER_UID --gid $USER_GID -m $USERNAME \
&& apt-get update \
&& apt-get install -y sudo \
&& echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME \
&& chmod 0440 /etc/sudoers.d/$USERNAME

↑vscodeというユーザーを追加し、UIDとGIDを1000にしています。
docker compose run する際に-uをオプションを使うか、docker-compose.ymlにUSERを追記して実行ユーザーを指定できます。
これでコンテナ内で作成したファイルを上書きできるようになったはずです。