File-Permissions

如何將文件添加到沒有 root 權限的 docker 容器中?

  • April 24, 2018

我正在嘗試將文件添加到從官方tomcat圖像建構的 Docker 圖像中。該圖像似乎沒有 root 權限,因為tomcat如果我執行 bash,我會以使用者身份登錄:

docker run -it tomcat /bin/bash
tomcat@06359f7cc4db:/usr/local/tomcat$ 

如果我指示 aDockerfile將文件複製到該容器,則該文件具有權限644並且所有者是root. 據我了解,這似乎是合理的,因為 Dockerfile 中的所有命令都以 root 身份執行。但是,如果我嘗試將該文件的所有權更改為 ,則會tomcat:tomcat出現Operation not permitted錯誤。

為什麼我不能更改複製到該圖像的文件的權限?

如何複製:

mkdir docker-addfilepermission
cd docker-addfilepermission
touch test.txt
echo 'FROM tomcat
COPY test.txt /usr/local/tomcat/webapps/
RUN chown tomcat:tomcat /usr/local/tomcat/webapps/test.txt' > Dockerfile

docker build .

的輸出docker build .

Sending build context to Docker daemon 3.072 kB
Sending build context to Docker daemon 
Step 0 : FROM tomcat
---> 44859847ef64
Step 1 : COPY test.txt /usr/local/tomcat/webapps/
---> Using cache
---> a2ccb92480a4
Step 2 : RUN chown tomcat:tomcat /usr/local/tomcat/webapps/test.txt
---> Running in 208e7ff0ec8f
chown: changing ownership of '/usr/local/tomcat/webapps/test.txt': Operation not permitted
2014/11/01 00:30:33 The command [/bin/sh -c chown tomcat:tomcat /usr/local/tomcat/webapps/test.txt] returned a non-zero code: 1

可能有一種方法可以查看和更改 tomcat 的 Dockerfile,但幾分鐘後我無法弄清楚。我不優雅的解決方案是在 chown 之前添加這一行:

USER root

如果您想在之後(推薦)降低權限,您可以添加以下行:

USER tomcat

或者,使用未安裝軟體的映像,以便您可以以 root 身份啟動 Dockerfile 並安裝 tomcat 等。根據我的經驗,他們改變了他們的形象實際上很奇怪。允許預期的最終使用者按照他們認為合適的方式設置 USER 指令是有意義的。

引用自:https://serverfault.com/questions/641264