Docker Copy and change owner

鉴于以下 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

在复制的测试目录中,我将文件权限设置为770。

如果在容器中执行 su john,则无法访问测试目录中的任何文件或子目录。这个问题似乎与 aufs 文件系统中的所有权有关,其中复制的目录仍然为 root 用户所有,权限设置为770。

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

133334 次浏览

我想我找到解决办法了,很有效。使用数据卷容器可以解决这个问题。首先,我创建数据卷容器,它包含我的外部目录的副本:

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

The setpermissions script does the job of setting the user permissions:

#!/bin/bash


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

Now I just have to use the --volumes-from <myDataContainerId> when running the application container.

--chown标志最终被添加到 COPY:

COPY --chown=patrick hostPath containerPath

这种新的语法似乎适用于 Docker 17.09。

有关更多信息,请参见 公关