file-permissions – 如何将文件添加到没有root权限的docker容器中?

我正在尝试将文件添加到从官方tomcat映像构建的Docker镜像中.该图像似乎没有root权限,因为如果我运行bash,我以用户tomcat身份登录:
docker run -it tomcat /bin/bash
tomcat@06359f7cc4db:/usr/local/tomcat$

如果我指示Dockerfile将文件复制到该容器,则该文件具有权限644,并且所有者为root.据我所知,这似乎是合理的,因为Dockerfile中的所有命令都以root身份运行.但是,如果我尝试将该文件的所有权更改为tomcat:tomcat,则会出现Operation not allowed错误.

为什么我不能更改复制到该图像的文件的权限?

如何复制:

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

如果您想在(建议)之后取消权限,可以添加以下行:

用户tomcat

或者,使用没有安装软件的映像,这样您就可以以root身份开始Dockerfile并安装tomcat等等.实际上他们根据我的经验改变了他们的形象.允许预期的最终用户在他们认为合适时设置USER指令是有意义的.

相关文章

linux常用进程通信方式包括管道(pipe)、有名管道(FIFO)、...
Linux性能观测工具按类别可分为系统级别和进程级别,系统级别...
本文详细介绍了curl命令基础和高级用法,包括跳过https的证书...
本文包含作者工作中常用到的一些命令,用于诊断网络、磁盘占满...
linux的平均负载表示运行态和就绪态及不可中断状态(正在io)的...
CPU上下文频繁切换会导致系统性能下降,切换分为进程切换、线...