当前位置: 首页 > 面试题库 >

Docker复制和更改所有者

姜俊逸
2023-03-14
问题内容

鉴于以下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。但这似乎更像是一种hack。


问题答案:

我想我找到了一个可行的解决方案。使用数据卷容器可以解决问题。首先,我创建数据卷容器,其中包含我的外部目录的副本:

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>在运行应用程序容器时使用即可。



 类似资料:
  • 我正在使用Apache POI处理。docx文件。 我试着把这个例子做得尽可能少。谢谢你的帮助!

  • 问题内容: 我需要在netcdf文件中处理一个实际上包含许多属性和变量的变量。我认为无法更新netcdf文件 我的方法如下: 从原始文件获取要处理的变量 处理变量 将所有数据从原始netcdf复制,但将已处理的变量复制到最终文件 将已处理的变量复制到最终文件 我的问题是对步骤3进行编码。我从以下内容开始: 如何在不重建整个数据结构的情况下将所有数据和属性保存在完整的代码中? 问题答案: 这就是我刚

  • 每次单击project面板上的java类文件时,打开的文件都带有一些混乱的代码。 我有一个从1个月前这个项目的备份,所以这里是一个例子。 旧的comment.java代码: 谢谢你。

  • 我试着运行一段代码,在pandas数据帧中遍历一列,如下所示: 每当我检测到一个值小于0的项目时,我都想加上1,000,000,并将结果放回dataframe中。 我试着这样做: 但是我得到了一个关键错误。 如何访问for循环的当前位置?

  • 问题内容: 我正在通过创建带有一些nodejs指令的来玩docker。现在,每次更改dockerfile时,我都会通过在项目文件夹中运行来重新创建映像,但这每次都会创建一个新映像,并很快吞没我的ssd。 更改dockerfile时,是否有一种方法可以更新现有映像,或者每次更改文件时都被迫创建一个新映像? 抱歉,这是一个愚蠢的问题 问题答案: 只要没有指令,Docker构建支持缓存。如果您正在积极地

  • 我们有MySQL服务器及其复制运行在另一台机器上。主从机都运行在MySQL5.6上,现在的计划是更新主从机的IP。我们计划在复制中使用下面的查询。 请确认一下上述方法是否正确,是否有足够的信息,以便在主主机ip更新的情况下进行复制。 提前道谢。