2017-04-18 6 views
0

私はGithub の誰かが作成したDockerファイルを探していましたが、私はDockerファイルでRUNが定義されるたびにUSER usernameディレクティブが先行することに気付きました。Dockerfile:RUNを実行する前にどのユーザーを指定する必要がありますか?

は、それは必須ですか?それともカスケードスタイルに設定されていますか?

USER root 
RUN commandA 
USER www 
RUN commandB 
.... 
RUN commandC 

どのユーザーがcommandCを実行するのですか?最新の宣言(www)? または何か他のものがあります(別のDockerコマンドでデフォルトに変更できますが、USERとは明らかに違います)。実行後のRUNそのものがユーザーをリセットすることはありますか?

それとも、単により冗長になることですか?

答えて

1

これは必須ではありません。 DockerfileにUSERを指定してすべてを実行しないようにすることは常に良い方法ですが、ビルドが前後に移動する必要があることがあります。あなたが戻って反転し、転送する必要がない場合は、単一USERディレクティブは、その下のすべての命令にまでカスケードます

... 
USER alice 
RUN ... // do stuff 
USER root 
RUN ... // do super privileged stuff 
USER alice 
CMD ... // run my app as non-privileged user 
... 

:あなたはおそらく参照してくださいよどこです。ユーザーがcommandCを行うことであろう

... 
USER alice 
RUN ... // as alice 
WORKDIR ... 
RUN ... // as alice 
ENV ... 
RUN ... // as alice 
CMD ... // as alice 
... 
1

commandBcommandCの間にはUSERコマンドはありません場合は、それはofficial docs of USERから、commandCを実行するために、ユーザwwwです:

USER命令がイメージを実行するときに使用するユーザー名またはUIDを設定し、任意のRUN、CMDおよびENTRYPOINT命令についてはに従ってください。 Dockerファイルにあります。

RUNコマンドではなく、実際に必要な場所でユーザーを切り替えるには、USER userを使用する必要があります。ちなみに、USERCMDENTRYPOINTにも適用されます。つまり、最後のUSERコマンドのユーザーも、コンテナでプロセスを実行するユーザーです。

関連する問題