Docker复制并更改所有者

给定以下的Dockerfile

FROM ubuntu RUN groupadd mygroup RUN useradd -ms /bin/bash -G mygroup john MKDIR /data COPY test/ /data/test data RUN chown -R john:mygroup /data CMD /bin/bash 

在我的testing目录,这是复制我已经设置文件权限为770。

如果我在我的容器中执行su john ,我无法访问我的testing目录中的任何文件或子目录。 看起来这个问题与aufs文件系统中的所有权有关,在这里复制的目录仍然由root拥有,权限被设置为770。

有没有解决这个问题正确设置权限? 可以在复制之前将原始目录的权限设置为容器用户的uid。 但是这看起来更像是一个黑客。

一个--chown标志最终被添加到COPY

 COPY --chown=patrick foo bar 

这个新的语法似乎在Docker 17.09上工作。

查看公关了解更多信息。

我想我find了一个解决scheme,这是可行的。 使用数据容器将会有所裨益。 首先我创build数据卷容器,其中包含我的外部目录的副本:

 FROM busybox RUN mkdir /data VOLUME /data COPY /test /data/test CMD /bin/sh 

在我的应用程序容器中,我有我的用户,可能看起来像这样

 FROM ubuntu RUN groupadd mygroup RUN useradd -ms /bin/bash -G mygroup john COPY setpermissions.sh /root/setpermissions.sh CMD /root/setpermissions.sh && /bin/bash 

setpermissions脚本执行设置用户权限的工作:

 #!/bin/bash if [ ! -e /data/.bootstrapped ] ; then chown -R john:mygroup /data touch /data/.bootstrapped fi 

现在,我只需要在运行应用程序容器时使用--volumes-from <myDataContainerId>