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

Dockerfile内でのユーザー関連で誤解していたこと2つ

Posted at

Dockerイメージ構築にあたってユーザー設定は必要なことですが、いくつかの勘違いが発覚しました。

TL; DR

  • DockerfileのUSERrootを抜けても戻せる
  • DockerfileのCOPYは指定しないとrootでファイルが作成される
  • COPY --chown=でユーザー設定可能

Dockerコンテナとユーザー

何も考えずにDockerコンテナを構築すると、「動作ユーザーがroot」となってしまいます。もちろん動くといえば動くのですが、コンテナの中身を好き勝手に書き換え可能なのは好ましい状況ではありません。

ということで、Unix系のユーザーとファイルパーミッションを、Docker自体でも対応して設定可能です1

いちばんわかりやすいものとしては、USER ユーザー名のようにして、これ以降のコンテナ構築、そしてコンテナ実行時のユーザーを指定できます。

USERに関する誤解…戻せる!

はじめ、DockerfileのUSERは、Unix系でよくある「権限放棄」パターンと同じで、一度root以外に切り替えたら戻せないと思っていました。

ところが、実際には自由に切り替えられる、つまり一度root以外を指定してからまたrootに戻れるものでした。必要な部分だけrootになってまた戻る、みたいな作業も自由自在だったのです。

USERCOPYの関係性

上のような誤解をしたまま書いていたDockerfileで、USER userのように切り替えてからCOPYをかけたのですが、現在のユーザーでコピーが行われると想定していたところが、想定したように動かない事態に陥りました。

こちらは改めて調べてみればリファレンスにも明記してあったのですが、

新しいファイルやディレクトリは、オプションの --chown フラグでユーザ名、グループ名、UID/GID の組み合わせて追加対象の権限指定リクエストを指定しない限り、 UID と GID が 0 として作成されます。

ということで、COPYUSERで設定したユーザーとは無関係に、作成したファイルやディレクトリへデフォルトでrootを設定していきます。

変えたい場合は「別途chownを実行する」までもなくCOPY --chown=userのような指定が可能です。

外部リンク

脚注

  1. Windowsコンテナもありますが、そもそもUSERchownといったUnix系の権限設定機能そのものがLinuxコンテナ専用なので、今回の議論対象には入りません。

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