Fumiya_Senoo’s diary

日々の気になったこと、役立ったことを記録しています

Jenkins の Docker プラグインを使用したとき Docker container 内での user id が Jenkins のユーザーを引き継ぐ

んだけど、なぜそうするのかよくわからない。

何が起きているか

具体的には docker run 時に以下のような感じでオプションが追加された状態で起動される。

docker run -u {Jenkins ユーザーのID}:{Jenkins ユーザーのグループ ID}

一応、自前で -u オプションをつけると、 -u オプションが2つついたような状態になるんだけれど、自分で書いたほうが優先されるようになる。(自分で書いたほうが後ろのほうに書かれるから優先されるというのが正しい表現な気がする。)

なぜそんなことをするのか?

わからん。想像するに、ファイルのオーナーの都合のような気はするけど、 Docker で操作するようなファイルはむしろ Docker 内のユーザーで操作することを前提として用意するだろうからかえって困りません?というか、実際に困ったからこんなこと調べる羽目になったわけなんだけれども。

どうやって解決するか

docker run 時にオプションを追加して、オリジナルの /etc/passwd と /etc/group を参照させることで回避できる。ただし、オリジナルのファイルを変更されると困るので、以下のような感じ。

docker run -v /etc/passwd:/etc/passwd:ro -v /etc/group:/etc/group:ro

最後に

解決策としては間違いないと思うんだけど、そもそもなぜそんなことをするのかがわかってないのでもやもやしてます。