非root用户的内部容器容器文件权限问题

时间:2019-10-13 09:33:07

标签: linux docker permissions

我正在扩展程序from here的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用户,并且我看到了{{1 }}错误。我试图通过permission denied命令更改Dockerfile中的所有权,但看到了chmod错误。正在运行的容器的用户不是root用户,并且它无法访问root用户拥有的Operation not permitted文件。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

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

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

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

在您的Dockerfile方法中,the base image runs as an alternate USER但默认情况下的COPY指令使文件归root拥有。从相对较新的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