我试图添加一个文件到一个从官方的tomcat图像构build的Docker镜像。 该图像似乎没有root权限,因为我以用户tomcat身份login,如果我运行bash:
docker run -it tomcat /bin/bash tomcat@06359f7cc4db:/usr/local/tomcat$
如果我指示Dockerfile将文件复制到该容器,则该文件具有权限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 .的输出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
如果您想要取消(build议)后的权限,您可以添加以下行:
USER tomcat
或者,使用没有安装软件的映像,以便可以以root用户身份启动Dockerfile并安装tomcat等等。 从他们的经历中改变他们的形象实际上是奇怪的。 允许预期的最终用户在他们认为合适的时候设置USER指令是有意义的。