我有一个小型 Docker 容器,可以从中访问 /dev/loop0。为此,我添加了docker run
:
--device=/dev/loop-control:/dev/loop-control \
--device=/dev/loop0:/dev/loop0 \
在这个环回设备上,我正在使用 parted/fdisk 创建两个或多个分区。
现在,我需要挂载两个分区,但不幸的是我无法访问动态创建的任何一个或任何其他分区/dev/loop0p1
。/dev/loop0p2
有什么方法可以访问它们而无需生成容器--privileged
?
谢谢你。
尽管这个问题很老,但这仍然是一个问题。
Linux 内核不会将设备注册事件传播到容器,这就是为什么
/dev/*
容器运行时添加的设备文件不会出现在容器中的原因。作为容器内的解决方法,您可以查找丢失的设备文件并像以下 shell 脚本那样创建它们:
(我曾经
FILTER='^(r|n)bd'
匹配/dev/rbdX
和/dev/nbdX
设备 ceph 在我的情况下动态创建。)请注意,上面的脚本不会取消注册已在主机上删除的设备。如果您还需要这样做,您也可以运行以下命令(
FILTER
需要指定):如果您的设备是动态创建的,您可能希望在容器中定期运行这两个脚本。
您仍然需要运行容器
--privileged
才能使用设备。另请参阅我的脚本所基于的这个 moby 问题评论。