连接设备后,我编写了udev规则来创建SYMLINKS。这些规则在主机上运行良好,但是当我使用安装在/etc/udev/rules.d中的相同规则启动容器时,它们在我的容器中不起作用。

我试图检测何时插入外部驱动器并创建相应的符号链接(symbolic link)。如果在docker run时存在驱动器,则会在容器启动时创建/dev/sdX,但它不会在run命令后出现,也不会在移除驱动器后消失。

这是一个在主机上正常工作的示例规则:
KERNEL=="sd?", SYMLINK+="test_%k"

最佳答案

我想到了。我在互联网上看到的是将主机的/dev安装在容器中:
docker run -v=/dev:/dev(注意:不安全)

但这是非常危险的,并且几乎会通过恶意破坏主机(例如无法生成psuedo-terminals)。

但是,如果我在主机上设置了udev规则以在唯一的子目录中创 build 备,例如/dev/foo/sdX ,那么我就可以与我的容器共享dev/foo:

docker run -v=/dev/foo:/dev/foo

现在,当我插入与udev规则匹配的驱动器时,主机将在/dev/foo/sdX中创建一个符号链接(symbolic link),该符号链接(symbolic link)现在对于我的容器而言是突然可见的。卸下驱动器后,/dev/foo/sdX也消失了。

最好的一个缺少的功能是在创 build 备时能够在容器内触发脚本的功能。使用udev规则可以在主机上执行此操作,但是似乎没有udev规则在容器内部被触发。因此,现在是手动轮询。

关于linux - 为什么我的udev规则不能在正在运行的Docker容器内工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36880565/

10-16 17:03
查看更多