【问题标题】:Is it possible see volume in Docker as device?是否可以将 Docker 中的卷视为设备?
【发布时间】:2018-10-27 20:20:40
【问题描述】:

我有一个在生产中使用的脚本,它基本上是这样做的:

make.ext4 ... /dev/sdb1
mount /dev/sdb1 /folder
and so on

我有一个 Docker 环境,可以在其中模拟我的生产环境。现在,我需要的是可以在两个环境中使用相同的脚本。为此,我需要在 Docker 中拥有一个 /dev/sdb1 设备并以某种方式在其上附加一个卷,这样当我运行上面的命令时,我的卷就会附加到 /folder。

我知道这可以通过以下方式轻松完成:

docker run -t <tag> -v <my volume>:/folder -it /bin/bash

但是通过这种方式,Docker 容器中的情况有些不同,我需要修改我的脚本(在我的情况下,我有几个脚本要更改)。

有没有办法做类似的事情:

docker run -t <tag> -v <my volume>:/dev/sdb1 -it /bin/bash

所以当我在 Docker 中时:

mount /dev/sdb1 /folder

我将外部卷挂载到容器中的 /folder 吗?

【问题讨论】:

    标签: docker dockerfile mount docker-volume


    【解决方案1】:

    您是否尝试过以挂载权限运行 docker?

    也许如果你启动 docker run --privilegeddocker run --cap-add=SYS_ADMIN,你可以从 docker 访问 /dev/sdb1,所以,mount /dev/sdb1/ 是可能的

    有关 docker 容器权限的更多信息,请参阅:Docker Documentation privileged mode and capabilities

    【讨论】:

    • 是的,我试过了,但问题是在 Mac 上,Docker 在 Linux 虚拟机上运行,​​当你运行时:docker run --privileged -v ... 文件夹已正确安装。在 Linux VM 上,卷位于 /var/lib/docker/volume/ 上。您可以卸载它,但是当您使用 sdb1 重新安装它时,它会安装 /var/lib 而不是 /var/lib/docker/volume/。我不知道如何告诉挂载命令我不需要整个 /dev/sdb1(Linux VM 上的 /var/lib),而是它的子文件夹 /var/lib/docker/volume/
    • 是的,我试过了。我看到已安装卷,我什至可以卸载它。但是,如果我使用 /dev/sdb1 再次挂载,它将 /var/lib 挂载到我的 Linux VM(在 Mac 上)而不是 /var/lib/docker/volume/ 我需要一种方法来告诉挂载命令挂载/var/lib/docker/volume/ 而不是 /var/lib 但我不清楚该怎么做。
    • 问题是 /var/lib/docker/volume/ 位于同一挂载点, /var/lib 无法单独使用它们。您需要为两者使用不同的安装点,否则无法在没有另一个的情况下卸载一个。
    • 可能我没有正确解释我的问题。每当您在 Docker 中创建卷时,它都会在 Linux VM 上的 /var/lib/docker/volume/ 中创建。假设您创建了两个卷 V1 和 V2,并将它们安装在 Docker 映像 /folder1 和 /folder2 的不同安装点上。如果您运行不带参数的 mount 命令,您会看到两个挂载都将 /dev/sdb1 作为设备。现在 Linux VM 上的 /dev/sdb1 与 /var/lib 映射。实际上,如果您尝试卸载两个文件夹并将 /dev/sdb1 安装在文件夹 1 上,您将在其中看到 /var/lib 的内容,这在我看来是出乎意料的。
    • 这就是为什么,正如我之前所说,当你在 docker 中挂载卷时 与 linux mount 不一样。 Linux 使用 1 个挂载点和 docker 几个“虚拟”挂载点(内部符号链接)用于 1 个单个 linux 挂载点。
    猜你喜欢
    • 2019-07-27
    • 2013-07-21
    • 2019-06-02
    • 2018-10-29
    • 1970-01-01
    • 2018-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多