Docker复制和更改所有者
给定以下DockerfileDocker复制和更改所有者,docker,file-permissions,dockerfile,Docker,File Permissions,Dockerfile,给定以下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 如果在容器中执行sujohn,则无法访问测试目录中的任何文件或子目录。这个问题似乎与aufs文件系统
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
如果在容器中执行sujohn
,则无法访问测试目录中的任何文件或子目录。这个问题似乎与aufs文件系统中的所有权有关,在aufs文件系统中,复制的目录仍然由root所有,权限设置为770
是否有解决此问题的方法来正确设置权限?一种方法是在复制之前将原始目录的权限设置为容器用户的uid。但这似乎更像是一个黑客行为。我想我找到了一个解决方案,它是有效的。使用数据卷容器就可以做到这一点。首先,我创建数据卷容器,其中包含我的外部目录的副本:
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
如果[!-e/data/.bootstrapped];然后
约翰:我的小组/数据
touch/data/.bootstrapped
fi
现在,我只需在运行应用程序容器时使用--volumes from
。一个--chown
标志终于被添加到COPY
:
COPY --chown=patrick hostPath containerPath
这个新语法似乎在Docker 17.09上起作用
有关更多信息,请参见。在
复制之前
和MKDIR
我认为您应该有一个用户john
,也许这可以工作,但我必须创建完整的目录结构进行复制,因此这是不可接受的。对我来说,它与--chown=USER:group
一起工作,我让那个用户和组在containerThanks中创建了那个评论,我使用了正常的user.group
语法,但它不起作用,很高兴我偶然发现了这个语法。@Torqueuser.group
的“正常”语法在哪里?
通常被接受为用户名的一部分,因此我有点怀疑/好奇为什么会将其用作分隔符……在docker版本:19.03.9中,甚至ADD--chown=user:group
或UID:GID
都很好用。不管它值多少,user.group过去都很常见。我不能给你一个参考,但我想它可能已经被用于太阳的YP。不管怎样,“正常”格式在某个时候从user.group改为user:group,但由于这两种格式的本质,这两种格式都经常工作,所以有一段时间的人可能会被欺骗也就不足为奇了。这和你以前遇到的情况一样。你应该考虑正确地接受另一个答案。它使用一个官方的码头标志为它没有脚本。请考虑接受另一个答案,也帮助其他人!此外,您可能应该在Dockerfile