栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

管理Docker共享卷权限的(最佳)方法是什么?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

管理Docker共享卷权限的(最佳)方法是什么?

更新2016-03-02 :从Docker
1.9.0开始,Docker已命名卷来替换仅数据容器。在我
如何思考docker内部的数据 的意义上,下面的答案以及我的链接博客文章仍然有价值,但是可以考虑使用命名卷而不是数据容器来实现下面描述的模式。


我相信解决这一问题的规范方法是使用仅数据容器。通过这种方法,所有对卷数据的访问都是通过使用

-volumes-from
数据容器的容器进行的,因此主机uid / gid无关紧要。

例如,文档中给出的一个用例是备份数据量。为此,另一个容器用于通过进行备份

tar
,它也用于
-volumes-from
装载卷。因此,我认为grok的关键点在于:与其考虑如何通过适当的权限访问主机上的数据,不如考虑如何通过另一个容器来执行所需的任何操作(备份,浏览等)。
。容器本身需要使用一致的uid / gids,但它们不需要映射到主机上的任何内容,从而保持可移植性。

对于我来说,这也是相对较新的,但是如果您有特定的用例,请随时发表评论,我将尝试扩展答案。

更新
:对于注释中的给定用例,您可能有一个

some/graphite
运行石墨的图像,以及一个
some/graphitedata
作为数据容器的图像。因此,忽略端口等,
Dockerfile
映像
some/graphitedata
的类似于:

FROM debian:jessie# add our user and group first to make sure their IDs get assigned consistently, regardless of other deps added laterRUN groupadd -r graphite   && useradd -r -g graphite graphiteRUN mkdir -p /data/graphite   && chown -R graphite:graphite /data/graphiteVOLUME /data/graphiteUSER graphiteCMD ["echo", "Data container for graphite"]

构建和创建数据容器:

docker build -t some/graphitedata Dockerfiledocker run --name graphitedata some/graphitedata

some/graphite
Dockerfile也应该得到相同的UID /导报,因此它可能是这个样子:

FROM debian:jessie# add our user and group first to make sure their IDs get assigned consistently, regardless of other deps added laterRUN groupadd -r graphite   && useradd -r -g graphite graphite# ... graphite installation ...VOLUME /data/graphiteUSER graphiteCMD ["/bin/graphite"]

它将如下运行:

docker run --volumes-from=graphitedata some/graphite

好的,现在这为我们的石墨容器和关联的仅数据容器提供了正确的用户/组(请注意,您也可以将

some/graphite
容器重新用于数据容器,在运行时覆盖entrypoing
/ cmd,但是将它们作为IMO更加清晰)。

现在,假设您要编辑数据文件夹中的内容。因此,与其将卷绑定到主机上并在其上进行编辑,不如创建一个新容器来完成该工作。叫它吧

some/graphitetools
。让我们也创建适当的用户/组,就像
some/graphite
图像一样。

FROM debian:jessie# add our user and group first to make sure their IDs get assigned consistently, regardless of other deps added laterRUN groupadd -r graphite   && useradd -r -g graphite graphiteVOLUME /data/graphiteUSER graphiteCMD ["/bin/bash"]

您可以通过从Dockerfile 继承

some/graphite
some/graphitedata
在Dockerfile中进行此DRY
,或者代替重新创建新映像,而仅重用现有映像之一(必要时覆盖entrypoint / cmd)。

现在,您只需运行:

docker run -ti --rm --volumes-from=graphitedata some/graphitetools

然后

vi /data/graphite/whatever.txt
。这非常有效,因为所有容器的石墨用户都相同,并且具有匹配的uid / gid。

由于您从未

/data/graphite
从主机上进行挂载,因此无需关心主机uid /
gid如何映射到
graphite
graphitetools
容器中定义的uid / gid
。这些容器现在可以部署到任何主机,并且它们将继续正常运行。

这样做的好处是,它

graphitetools
可能具有各种有用的实用程序和脚本,您现在也可以以可移植的方式进行部署。

更新2 :写完这个答案后,我决定写一篇关于此方法的更完整的博客文章。希望对您有所帮助。

更新3 :我更正了此答案,并添加了更多细节。它先前包含有关所有权和权限的一些错误假设-
所有权通常是在卷创建时即在数据容器中分配的,因为这是在创建卷时分配的。请参阅此博客。不过,这不是必须的-
您可以仅将数据容器用作“引用/句柄”,并通过入口处的chown在另一个容器中设置所有权/权限,最后以gosu身份以正确的用户身份运行命令。如果有人对此方法感兴趣,请发表评论,我可以提供使用该方法的示例链接。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/426410.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号