首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过卷共享安装在码头容器内的保险丝FS

通过卷共享安装在码头容器内的保险丝FS
EN

Stack Overflow用户
提问于 2018-12-05 11:45:30
回答 1查看 6K关注 0票数 11

我创建了一个码头容器,在这里我安装了一个fuse S3QL FS。而且这起作用了。

现在,我希望能够与主机或其他容器共享这个挂载点,但它不起作用。

为了使它更短,我以这样的方式运行容器:

代码语言:javascript
复制
docker run --rm -d -v /s3ql:/s3ql \
           --cap-add SYS_ADMIN --device /dev/fuse \
           --name myContainer \
                myS3qlIimage mount.s3ql swiftks://url:container /s3ql

docker exec myContainer ls /s3ql显示实际的S3QL内容,但是主机上的/s3ql是空的。

关于我如何完成回购的更多细节:https://gitlab.com/Salokyn/docker-s3ql

你认为有可能做到这一点吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-05 12:14:23

通常,当您启动Docker容器时,它在一个私有挂载命名空间中运行:这意味着(a)安装在容器中的文件系统在主机上不可见,(b)安装在主机上的文件系统在容器中不可见。

可以使用绑定-传播标志将此行为修改为--mount选项。此标志有六个可用的值:

  • shared:原始挂载的子挂载向复制挂载公开,复制挂载的子挂载也传播到原始挂载。
  • slave:类似于共享挂载,但只有一个方向。如果原始挂载公开一个子挂载,复制挂载可以看到它.但是,如果副本挂载公开了一个子挂载,则原始挂载无法看到它.
  • private:挂载是私有的。它内的子挂载不暴露于复制挂载,而复制挂载的子挂载不暴露于原始挂载。
  • rshared:与shared相同,但传播也扩展到嵌套在任何原始或副本挂载点内的挂载点。
  • rslave:与从节点相同,但传播也扩展到嵌套在任何原始或副本挂载点内的挂载点。
  • rprivate:默认设置。与私有相同,这意味着原始或复制挂载点中的任何位置都不会向任一方向传播。

根据您的问题,您可能希望使用rshared选项,它允许在主机上安装容器内的挂载。这意味着您的docker命令行看起来如下所示:

代码语言:javascript
复制
docker run --rm \
  --mount type=bind,source=/s3ql,target=/s3ql,bind-propagation=rshared \
  --cap-add SYS_ADMIN --device /dev/fuse --name myContainer \
  myS3qlIimage mount.s3ql swiftks://url:container /s3ql

但是这里可能还有第二个问题:如果您的fuse挂载需要一个持久的进程才能正常工作,这是行不通的,因为您的容器将在mount命令完成后立即退出,并接受其中的任何进程。在这种情况下,您需要安排容器挂起,只要您需要挂载活动:

代码语言:javascript
复制
docker run -d \
  --mount type=bind,source=/s3ql,target=/s3ql,bind-propagation=rshared \
  --cap-add SYS_ADMIN --device /dev/fuse --name myContainer \
  myS3qlIimage sh -c 'mount.s3ql swiftks://url:container /s3ql; sleep inf'

(这假设您有一个支持inf参数永久休眠的inf命令的版本)。

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53631567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档