我有一个构建过程,该过程通过将某些软盘映像(文件)安装在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
有什么主意如何解决此问题,以便我能够通过回送接口在多个容器上挂载映像?
其他详细信息:
容器概述,并尝试在第二个容器中装入软盘映像:
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和OS版本:
[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"
答案 0 :(得分:1)
尽管我不知道为什么docker / linux / mount以这种愚蠢的方式运行,但是我找到了一种解决方法(或者说是更好的解决方案),该问题允许创建软盘映像而无需挂载它们。
create a virtual floppy image without mount?
此外,它的好处是不需要任何额外的权限,因此我可以在没有docker run
的情况下进行--privileged --device-cgroup-rule="b 7:* rmw"