2017-04-18 62 views
0

我正在尋找一個由Github上的人創建的Dockerfile ,我注意到每次在Docker文件中定義一個RUN時,它都有一個USER用戶名指令。Dockerfile:是否需要在執行RUN之前指定哪個用戶?

它是強制性的嗎?或者它被設置爲層疊樣式?

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

哪個用戶會執行commandC?最新聲明(www)? 或者還有其他的東西(一些其他的Docker命令可以改變它爲默認的,除了USER顯然)執行後的RUN本身可能會重置用戶?

還是隻是爲了更詳細?

回答

1

這不是必要的,沒有。爲Dockerfile提供USER以避免將所有內容運行爲root總是不錯的做法,但是有時候構建版本需要翻轉和轉發。這就是你可能會看到:

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

如果您不需要翻轉前進和後退,然後一個USER指令將向下級聯到它下面的所有指令。

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

哪個用戶將執行commandC?

如果有commandBcommandC之間沒有USER命令,它的用戶www運行commandC,從official docs of USER:運行圖像時

用戶指令設置的用戶名或UID使用和對於任何RUN,CMD和ENTRYPOINT指令,跟隨它在Dockerfile中

因此,您只需使用USER user即可在真正需要的地方切換用戶,而不是每個RUN命令。另外,USER也適用於CMDENTRYPOINT,這意味着最後USER命令中的用戶也是在容器中運行您的進程的用戶。

相關問題