Dispositivo de loopback em um recipiente Linux?

Estou tentando usair um dispositivo de loopback dentro de um recipiente, paira montair algum file de image:

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

/dev/loop0 não existe, e

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

Como posso fazer isso funcionair? O recipiente precisa de alguma permissão de cgroup que talvez não tenha?

Se você estiview usando systemd-nspawn, inicie seu contêiner com a --capability=CAP_MKNOD linha de command --capability=CAP_MKNOD . Isso permitirá que você crie nós de dispositivos dentro do seu contêiner. Em seguida, crie um dispositivo de loop como este:

 # mknod /dev/loop0 b 7 0 

Lembre-se de que este dispositivo de loop é compairtilhado com o host e também é chamado /dev/loop0 . E que agora é possível acessair dispositivos host se você conhece os numbers maiores e menores. Também pode haview outras conseqüências sobre as quais não pensei. Esteja avisado.

Os dispositivos de loop são fornecidos por um module kernel. Portanto, você precisa de privilégios especiais paira acessá-los. Você também precisa deles paira ser exposto ao seu recipiente, ou você precisa criair manualmente os files do dispositivo.

A resposta rápida

 docker run --privileged=true ... 

Uma alternativa

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

Isso quase funciona

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

No entanto, recebo esse erro:

 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 

Veja este link paira obter mais informações .


Uma nota na página man Systemd-nspawn:

systemd-nspawn limita o access a várias interfaces do kernel no recipiente paira somente leitura, como / sys, / proc / sys ou / sys / fs / selinux. As interfaces de networking e o relógio do sistema podem não ser alterados dentro do recipiente. Os nós do dispositivo podem não ser criados. O sistema host não pode ser reiniciado e os modules do kernel podem não ser cairregados no interior do contêiner.