作者:_Cokoice | 来源:互联网 | 2023-05-19 12:19
给出以下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.但这似乎更像是一个黑客.
1> Georgi Hrist..:
--chown
最后添加了一个标志COPY
:
COPY --chown=patrick hostPath containerPath
这种新语法似乎适用于Docker 17.09.
有关更多信息,请参阅PR.
对我来说,它使用`--chown = user:group`,我在容器中创建了该用户和组
2> Christian Me..:
我想我找到了一个有效的解决方案.使用数据卷容器就可以了.首先,我创建数据卷容器,其中包含我的外部目录的副本:
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
在运行应用程序容器时使用它.
这和以前一样.你应该考虑接受另一个答案是正确的.它使用官方docker标志,无需编写脚本.