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>
。