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.