Linux容器中的回环设备?

我正在尝试使用容器内的回送设备来装载一些图像文件:

> sudo losetup /dev/loop0 test.img losetup: /dev/loop0: failed to set up loop device: No such file or directory 

/dev/loop0确实不存在,并且

 > sudo mknod /dev/loop0 b 7 0 mknod: '/dev/loop0': Operation not permitted 

我怎样才能做这个工作? 容器是否需要一些它可能没有的cgroup权限?

    如果您使用systemd-nspawn,请使用--capability=CAP_MKNOD命令行开关启动容器。 这将允许您在容器内创build设备节点。 然后创build一个像这样的循环设备:

     # mknod /dev/loop0 b 7 0 

    请记住,此循环设备与主机共享,并且在那里也称为/dev/loop0 。 如果您知道主要和次要的数字,现在可以访问主机设备。 还可能有其他的后果,我没有想过。 被警告。

    循环设备由内核模块提供。 因此,您需要特殊的权限来访问它们。 您还需要将它们暴露在您的容器中,或者您需要手动创build设备文件。

    快速的回答

     docker run --privileged=true ... 

    替代

     sudo losetup /dev/loop0 test.img mount /dev/loop0 /mnt docker run -v /mnt:/mnt ... 

    这几乎工作

     docker run --device=/dev/loop-control:/dev/loop-control --device=/dev/loop0:/dev/loop0 --cap-add SYS_ADMIN ... 

    但是我得到这个错误:

     root@5c033d5f8625:/# sudo mount /dev/loop0 /mnt mount: block device /dev/loop0 is write-protected, mounting read-only mount: cannot mount block device /dev/loop0 read-only 

    请参阅此链接了解更多信息 。


    关于systemd-nspawn的说明手册页:

    systemd-nspawn将对容器中各种内核接口的访问限制为只读,如/ sys,/ proc / sys或/ sys / fs / selinux。 networking接口和系统时钟不能从容器内改变。 设备节点可能不会被创build。 主机系统无法重新启动,并且内核模块不能从容器内加载。