【问题标题】:Any unix wizardy to mount a device in the bare metal OS from a container任何从容器中将设备挂载到裸机操作系统的 unix 向导
【发布时间】:2018-11-14 01:18:20
【问题描述】:

我们使用容器在我们的存储节点上配置存储,但我终其一生都无法找到将设备从容器安装到裸机操作系统的方法。裸机和容器都运行 oracle linux 7.5。

我们不能为此使用任何形式的 ssh。这是一个隔离的计算环境,唯一的访问是通过我们用来管理容器的编排。

我主要是一个 solaris 人,所以想知道是否有任何我可以在这里工作的 linux 魔法。

我可以将任何裸机设备或文件系统挂载到容器中,并且可以以更多特权运行容器。

感谢任何帮助

* 说明 *

不是关于将卷安装到容器中。

此容器是一个临时配置容器,即:它执行诸如挂载 icisi 卷、创建卷组、创建逻辑卷和创建文件系统之类的工作。

这部分一切正常。

这个容器需要做的最后一步是以某种方式告诉裸机操作系统将设备安装到它的文件系统中。不在容器中。

简单的例子:我需要这个容器以某种方式告诉操作系统“mount /dev/sdg /data”。

此挂载不需要对容器可用。一旦分配了存储空间并挂载了它,容器就会被销毁。

我们不能为此使用 SSH。

【问题讨论】:

    标签: docker containers


    【解决方案1】:

    您需要克服几个问题。

    1. 默认情况下,Docker 无权访问 主持人。

    2. docker 容器无法修改自己的挂载命名空间。

    3. Docker 容器在私有挂载命名空间中运行,因此即使在 解决(1)和(2),您在容器内进行的任何安装都会 从主机看不到。

    幸运的是,以上所有问题都有解决方案!

    我们可以通过将--privileged 标志传递给 docker run。这消除了 Docker 通常的所有限制 放在容器上。

    为了解决 (3),我们需要使用 --mount 选项而不是 -v 选项,因为我们需要修改挂载传播的样式 用过的。通读documentation on bind-mounts, 我们看到--mount 选项支持以下选项:

    • 挂载类型,可以是绑定、卷或 tmpfs。本主题讨论绑定挂载,因此类型将始终为绑定。
    • 坐骑的来源。对于绑定挂载,这是 Docker 守护程序主机上文件或目录的路径。可以指定为 source 或 src。
    • 目标将文件或目录安装在容器中的路径作为其值。可以指定为目的地、目的地或目标。
    • readonly 选项(如果存在)会导致绑定挂载以只读方式挂载到容器中。
    • bind-propagation 选项(如果存在)会更改绑定传播。可能是 rprivate、private、rshared、shared、rslave、slave 之一。
    • 一致性选项(如果存在)可以是一致、委托或缓存之一。此设置仅适用于 Docker for Mac,在所有其他平台上均被忽略。

    我们关心的是bind-propagation 选项。的值 描述later on in the same document。 阅读它们,我们可能想要rshared

    有了这些知识,我就可以跑了:

    docker run -it \
      --mount type=bind,source=/,dst=/host,bind-propagation=rshared \
      --privileged alpine sh
    

    然后在我可以运行的容器里面,例如:

    mount /dev/sdd1 /host/mnt
    

    在主机上,我看到/dev/sdd1 的内容安装在/mnt 上。容器退出后挂载将持续存在。

    【讨论】:

    • 我正在运行 18.06 并且我拥有它 (docker run --help | grep mount)。
    • 是的,这个节点运行的是 17.0.3 非 ce 版本,并且由于某种原因它没有 --mount 选项。
    • 是的,这有帮助,但我最终也不得不在 lvm.conf 中闲逛并禁用一些与 udev 相关的东西,否则它不会在裸机级别挂载文件系统。我最终放弃了这种方法,并正在编写一个低级的 go 工具来直接创建卷。
    猜你喜欢
    • 1970-01-01
    • 2018-05-17
    • 1970-01-01
    • 2022-11-22
    • 2023-04-05
    • 2019-08-09
    • 2019-09-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多