1. 程式人生 > >Dockerfile中的權限問題及工作目錄問題(USER WORKDIR)

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

執行 -- 都是 解釋 ash main add docker bash

引題:看看這個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

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