linux - Docker 从多个容器挂载到循环设备不工作 只有一个容器可以挂载

标签 linux docker mount

我有一个构建过程,它通过将一些软盘图像(文件)安装在 docker 容器中来操纵它们。

一切都适用于一个容器,但如果我运行第二个容器,我无法在那里安装任何东西,尽管我使用不同的循环设备

如果我然后回到第一个容器并执行 umount,我可以毫无问题地挂载到第二个容器中。

我观察到 2 种行为,要么挂载命令永远挂起,要么立即失败:

mount: /tmp/ng-mmi7Ao-NGFW-Fresh-72x-Box/NGFW-Fresh-72x-Box.flp: failed to setup loop device: No such file or directory

有什么办法可以解决这个问题,以便我能够通过环回接口(interface)在多个容器上挂载图像吗?

其他详细信息:

容器概述并尝试在第二个容器中挂载软盘镜像:

CONTAINER ID        IMAGE                                             COMMAND                  CREATED             STATUS              PORTS                   NAMES
4181a8e5e8c7        10.0.0.201:5000/jenkins_autotest_slave:latest   "/usr/local/bin/setu…"   40 hours ago        Up 40 hours         127.0.0.1:32800->22/tcp   gallant_saha
0218fdce8ed7        10.0.0.201:5000/jenkins_autotest_slave:latest   "/usr/local/bin/setu…"   47 hours ago        Up 47 hours         127.0.0.1:32798->22/tcp   reverent_feistel

[qa@jenkins-staging ~]$ docker exec -ti 4181 bash
[root@4181a8e5e8c7 /]# sudo /usr/bin/mount -o loop=/dev/loop1,uid=1000 /tmp/ng-mmi7Ao-NGFW-Fresh-72x-Box/NGFW-Fresh-72x-Box.flp /tmp/ng-mmi7Ao-NGFW-Fresh-72x-Box/mp
mount: /tmp/ng-mmi7Ao-NGFW-Fresh-72x-Box/NGFW-Fresh-72x-Box.flp: failed to setup loop device: No such file or directory
[root@4181a8e5e8c7 /]# exit

现在卸载第一个容器

[qa@jenkins-staging ~]$ docker exec -ti 0218fdce8ed7 bash
[root@0218fdce8ed7 /]# sudo umount /tmp/ng-blabla-NGFW-Fresh-72x-Box/mp ## UMOUNT SO OTHER COTAINER CAN MOUNT
[root@0218fdce8ed7 /]# exit

现在可以挂载第二个容器了

[qa@jenkins-staging ~]$ docker exec -ti 4181 bash
[root@4181a8e5e8c7 /]# sudo /usr/bin/mount -o loop=/dev/loop1,uid=1000 /tmp/ng-mmi7Ao-NGFW-Fresh-72x-Box/NGFW-Fresh-72x-Box.flp /tmp/ng-mmi7Ao-NGFW-Fresh-72x-Box/mp
[root@4181a8e5e8c7 /]# exit ### MOUNT WAS SUCCESSFULL IN SECOND CONTAINER

在第一个容器中重试:

[qa@jenkins-staging ~]$ docker exec -ti 0218fdce8ed7 bash
[root@0218fdce8ed7 /]# date
Tue Apr 16 13:50:28 UTC 2019
[root@0218fdce8ed7 /]# sudo /usr/bin/mount -o loop=/dev/loop0,uid=1000 /tmp/ng-blabla-NGFW-Fresh-72x-Box/NGFW-Fresh-72x-Box.flp /tmp/ng-blabla-NGFW-Fresh-72x-Box/mp # MOUNT KEEPS HANGING NOW ON FIRST CONTAINER
^C
[root@0218fdce8ed7 /]# date
Tue Apr 16 13:57:21 UTC 2019

Docker 和操作系统版本:

[qa@jenkins-staging ~]$ docker -v
Docker version 18.09.5, build e8ff056
[qa@jenkins-staging ~]$ uname -a
Linux jenkins-staging 3.10.0-957.5.1.el7.x86_64 #1 SMP Fri Feb 1 14:54:57 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
[qa@jenkins-staging ~]$ cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)

Docker 运行命令:

docker run --privileged --device-cgroup-rule="b 7:* rmw" -p :22 10.0.0.201:5000/jenkins_autotest_slave:latest qa@jenkins-staging"

最佳答案

虽然我不知道为什么 docker/linux/mount 会以如此愚蠢的方式运行,但我找到了一个解决方法(或者,比方说,更好的解决方案)来解决我的问题,它允许创建软盘镜像而无需安装它们。

create a virtual floppy image without mount?

此外,这样做的好处是它不需要任何额外的权限,所以我可以在没有 --privileged --device-cgroup-rule="b 7 的情况下执行 docker run :* rmw".

关于linux - Docker 从多个容器挂载到循环设备不工作 只有一个容器可以挂载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55713038/

相关文章:

shell - ssh 在 golang 中使用交互式 shell 执行 nsenter 作为远程命令来调试 docker 容器

docker - 使用volume create部署docker应用程序

docker - 无法运行从 ISO 创建的 docker 镜像

java - 从 WicketPanel 传递页面参数

linux - 来自 udev 规则的参数未传递到 perl 脚本

python - 安装 pip 而无需 root 失败

linux - 为什么需要在 Datastax Cassandra 中关闭交换?

Linux 驱动器安装

node.js - 如何使用 Koa 提供静态文件?

c++ - 将boost_chrono_FOUND设置为FALSE,因此 “boost_chrono”软件包被视为未找到