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?

More than 1 year has passed since last update.

【備忘録】Dockerコンテナ内でホストと同じユーザを使う

Posted at

背景

Dockerコンテナ内ではデフォルトではrootユーザになる。そのため、コンテナ内に/home/<user名>以下のフォルダをマウントしてコンテナ内で例えはresult.pngresult.txtのようなファイルを生成するとそのファイルの所有者がrootとなり、コンテナ外からのファイルの閲覧や更新、削除にroot権限を求められることがある。

これが度々面倒臭いのでコンテナ内でもホストでの自分と同じユーザーで操作できるようにしたい。

解決方法

ユーザーはuser nameとuser idで識別されているため、コンテナに入った時のデフォルトユーザをホストの自分と同じuser name、user idにすれば良い。
例えは、user nameがhogehogeでuser idが501の時、これらは以下のように確認できる

$ whoami
hogehoge

$ id
uid=501(hogehoge) gid=1000(hogehoge) groups=1000(hogehoge)

通常のDockerfileに以下のように追記する。${UID}${USERNAME}は適宜自分のものに置き換えるか、変数として定義する必要がある。

RUN adduser --disabled-password --gecos "" --uid ${UID} ${USERNAME}
RUN echo "${USERNAME} ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
USER ${USERNAME}

このコードの説明を簡潔に書きます。

  1. RUN adduser --disabled-password --gecos "" --uid ${UID} ${USERNAME}
    新しいユーザーをシステムに追加します。パスワードは設定しません。

  2. RUN echo "${USERNAME} ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
    ユーザーにsudo権限を付与し、パスワード無しで任意のコマンドを実行できるようにします。

  3. USER ${USERNAME}
    これ以降のコマンドは、${USERNAME} として指定されたユーザーとして実行されます。

以上です。

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?