Dockerfile中的權限問題及工作目錄問題(USER WORKDIR)

引題:看看這個dockerfile

Dockerfile
FROM centos:7.4.1708
RUN useradd -b /home -m -s /bin/bash bes
ENV BES_HOME= /home/bes/BES8.2
COPY bes.lic.txt /home/bes/BES8.2/license/
RUN chmod a+xr -R /home/bes && \
chown bes:bes -R /home/bes
USER bes
WORKDIR $BES_HOME
ENTRYPOINT $BES_HOME/bin/iastool start --domain --passport admin --user admin --password admin domain1

我來分析一下這個dockerfile:
USER bes:
USER之前都是那些RUN COPY都是root身份執行的
USER之後 RUN CMD ENTRYPOINT 都是切換爲USER指定的bes用戶執行的,而COPY命令卻不服從,依舊是root。這裏是個坑。請注意
WORKDIR :切換目錄。 這個跟USER是相同的道理,COPY都是不會服從的
如果有多個workdir,那最後的會生效,如:
WORKDIR /a
WORKDIR b (注意這裏用了相對路徑)
WORKDIR c
RUN pwd
則最終路徑爲/a/b/c

補充RUN
再來解釋一下RUN 命令:

RUN cd /test
RUN echo "test" >test.txt
請問最後鏡像有/test/test.txt嗎? 答:NO
解釋:docker裏邊有層的概念,每個命令都是生成一個層,每個層都是獨立的空間。所以第二個RUN時,工作目錄並不會切換到/test下面 。
正確的寫法是:組合成一個
RUN cd /test && \
echo "test" >test.txt

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章