2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

「rootでいいや」は卒業!Docker runの-uオプションでpermission deniedを防ごう!

Last updated at Posted at 2025-06-24

-uオプションとは

Docker コンテナの実行時に、ユーザーID(UID)およびグループID(GID)を指定するためのオプションです。

bash
-u <UID>:<GID>

ホストの UID/GID を調べるには、以下のコマンドを使います。

bash
id -u
id -g

これを用いることで、コンテナ内のプロセスがホスト側のユーザーと同じ権限で動作し、マウントされたファイルとのパーミッションの整合性が取れます。

bash
docker run -it -u $(id -u):$(id -g) <image> bash

なぜ-uオプションを使う必要があるのか?

Dockerコンテナは初期状態ではrootユーザーとして動作します。

しかし、他のユーザーなどと連携する場合、正しい UID/GID を指定しないと、許可されていないファイル操作が発生したり、セキュリティ上の問題につながるおそれがあります。

そのため、コンテナ内での実行ユーザーを明示的に指定することは、安全性とホスト環境との互換性を確保するために重要です。

よくあるエラー「Permission denied」

ホスト上のディレクトリをボリュームマウントしているときに、以下のような操作をすると

bash
$ touch /new_dir/test

次のようなエラーになることがあります。

error
touch: cannot touch 'test': Permission denied

コンテナ内のユーザーが /new_dir に対する書き込み権限を持っていないためです。
このようなエラーに対応するのにも-uを使います。

例:ボリュームマウントしたディレクトリへの書き込み

ホストユーザーで対応

-u オプションでホストと同じUID/GID を指定することで、マウント先にも問題なく書き込み可能になります。

bash
$ docker run -it \
  -u $(id -u):$(id -g) \
  -v ~/work/mounted_folder:/new_dir \
  <image> bash

$ cd /new_dir && touch test
# → 成功:Permission denied を回避できる

rootユーザーで実行する

成功はするが、作成されたファイルはroot所有となり、ホスト側ユーザーがそのファイルを編集できないといった不都合が生じることがあります。

bash
$ docker run -it \
  -v ~/work/mounted_folder:/new_dir \
  <image> bash

root@container:/# cd /new_dir && touch test
# → 成功するが、ファイル所有者が root になる

パーミッションの確認

コンテナ内でファイルやディレクトリの所有者やパーミッションを確認するには、ls -lコマンドを使います。

bash
ls -l /new_dir

出力例:

drwxr-xr-x   2 root root    4096 Jun 24 10:52 dir_dockerfile

drwxr-xr-xがパーミッションコードで、 root rootがUIDとGIDです。

パーミッションコード

パーミッションコードは添付画像のように10桁のコードで、1文字目はファイルの種類、その後の3・3・3文字はそれぞれ所有ユーザー、所有グループ、その他ユーザーの権利です。

image.png

ファイルの種類は次の表のようになります。

記号 種類
- ファイル
d ディレクトリ
l シムリンク

また、所有ユーザー、所有グループ、その他のユーザーの権利は次の表のようになります。

記号 権利
r 読み取り
w 書き込み
x 実行

まとめ

-u $(id -u):$(id -g) を使えば、ホストユーザーと同じ権限で操作できるため、セキュリティ面、開発効率面ともにメリットが大きいです。

「とりあえず root」から卒業して、コンテナをより安全に、快適に使いこなしましょう!

2
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?