首页 > 解决方案 > 非root用户的内部容器容器文件权限问题

问题描述

我正在从这里扩展程序的 docker 映像,我想更改一些配置并创建自己的 docker 映像。我已经编写了如下的 Dockerfile 并替换了该图像中的 server.xml 文件:

FROM exoplatform/exo-community
COPY server.xml /opt/exo/conf
RUN chmod 777 /opt/exo/conf/server.xml

当我创建 docker 映像并从该映像运行一个实例时,容器的运行程序无法访问该文件server.xml,因为它的所有者是root用户并且我看到了permission denied错误。我试图通过chmod命令更改 Dockerfile 中的所有权,但我看到了Operation not permitted错误。运行容器的用户不是root用户,不能访问server.xmlroot用户拥有的文件。我该如何解决这个问题?

标签: linuxdockerpermissions

解决方案


如果这实际上只是一个配置文件,我不会围绕它构建自定义图像。相反,使用docker run -v选项在运行时注入它

docker run \
  -v $PWD/server.xml:/opt/exo/conf/server.xml \
  ... \
  exoplatform/exo-community

(您可能仍会遇到相同的权限问题。)

在您的 Dockerfile 方法中,基本映像作为备用用户运行,但默认情况下COPY指令使文件归根用户所有。从相对较新的 Docker 开始(18.03;如果您在 CentOS/RHEL 7 上使用 Docker 1.13,这将不起作用),您应该能够

COPY --chown=exo server.xml /opt/exo/conf

或者如果这不起作用,您可以显式切换到 root 用户并返回

COPY server.xml /opt/exo/conf
USER root
RUN chown exo /opt/exo/conf/server.xml
USER exo

推荐阅读