连接设备后,我编写了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/