2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WSL2でDockerを使用するときに発生するパーミッションエラーの回避方法

Posted at

はじめに

WSL2環境下でDockerを使い始めたのですが、パーミッションエラーがとにかくたくさん出たので対処方法を残しておきます。

開発環境

  • Windows11マシン
  • WSL2
  • Ubuntu
  • Rails
  • Docker

※バージョン等詳細は今回は大事ではなさそうなので省きます

問題

rails new rails gなどで作成したファイルでパーミッションエラーがでる。
具体的にはVSCODEで編集しようとすると保存できない。

前提

  • Dockerでrails環境を構築
  • docker compose exec rails /bin/bash でシェルを起動しrails newなどを行った

原因

  • rails newなどで作成したファイルのオーナーはデフォルトだとrootユーザーになる
  • VSCODEで編集・保存をするのはWSL2ユーザーになる
  • デフォルトでは所有者でもグループでもないファイルに書き込み権限は付与されない

解決方法

WSL2のデフォルトユーザーをrootにする。

方法

  • Ubuntuターミナルを起動

      # rootユーザーに切り替える
    $ sudo su -
      # Passwordを設定する
    $ passwd
      # このコマンドのあとにパスワード入力画面が表示
    
  • PowerShellを起動

    # デフォルトユーザーをrootに変更
    ubuntu config --default-user root
    

注意点

  • rootは権限が強いので、万が一Windows側の重要なファイルを削除してしまうと大変なことになる
  • 対応策:WSL2からWindows側のファイルへの書き込み権限をなくす
    • ubuntuターミナルを起動
    # wsl.confを編集する
    $ cd  /etc
    $ nano wsl.conf
    
    • 以下を追記
    [automount]
    options="metadata,umask=22,fmask=11,ro"
    
    • windowsを再起動

微妙に詰まったところ

  • デフォルトがrootになるとルートディレクトリでlsをしても何も表示されない
  • cd /home/今まで使ってたusernameで今まで使っていたディレクトリをそのまま使える

他の方法

Dockerfileを書き換える

  • USERを変えるように設定する
  • 具体的には USER $USERNAMEのような記述をDockerfileの最後の方で行うと、rails gなどのコマンドをrootではなく任意のusernameのユーザーにできる
  • 所有者が任意のユーザーになるので編集も可能

linuxのファイル作成時のデフォルト権限を変更する

  • .bashrcにumask 000を記述する

おわりに

これで都度chmodをする必要がなくなりました

参考

【Docker】 WSL 2 を利用したコンテナー内開発で権限をどう設定するべきか

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

WSL2でDockerを使用する際の権限問題を解決するシンプルな方法(docker-compose.yml使用)

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?