【问题标题】:Docker mounting to loop device from multiple containers not working only one container can mountDocker从多个容器挂载到循环设备不工作只能挂载一个容器
【发布时间】:2019-09-06 20:15:02
【问题描述】:

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

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

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

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

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

任何想法如何解决这个问题,以便我能够通过多个容器上的环回接口挂载图像?

其他详情:

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

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"

【问题讨论】:

    标签: linux docker mount


    【解决方案1】:

    虽然我不知道为什么 docker/linux/mount 的行为如此愚蠢,但我为我的问题找到了一种解决方法(或者,比方说,一个更好的解决方案),它允许在不安装软盘映像的情况下创建软盘映像。

    create a virtual floppy image without mount?

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-23
      • 1970-01-01
      • 2017-09-19
      • 1970-01-01
      • 1970-01-01
      • 2021-09-17
      • 2016-06-10
      • 2020-04-11
      相关资源
      最近更新 更多