我想动态获取由 udev 创建的设备的符号链接,这些设备在 docker 容器中的主机上运行
我能够将符号链接绑定到容器,但如果设备被删除(例如:usb 断开连接),它不会动态重新创建
Udev 规则示例:
SUBSYSTEM=="tty", ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="140c", MODE="0666", SYMLINK+="my_dir/gsm-modem0"
码头工人运行示例:
sudo docker run -v /dev/my_dir/gsm-modem0:/dev/my_dir/gsm-modem0 my_image my_script.sh
答案:
Udev 规则应符号链接到新目录:
SUBSYSTEM=="tty", ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="140c", MODE="0666", SYMLINK+="my_dir/gsm-modem0"
运行 docker 必须包含 --privileged:
sudo docker run --privileged -v /dev/my_dir:/dev/my_dir my_image my_script.sh
my_script.sh应该首先在创建的符号链接目录中创建一个新文件:
mkdir -p /dev/my_dir
touch /dev/my_dir/keep
解释:
出于某种原因,如果该目录为空,udev 可能会删除链接目录,并且由于通常/dev
是 tmpfs 创建新文件将无法在重新启动后幸存下来。在每次运行时触摸文件将保留包含主机上目录的链接,如果创建了新链接,它将出现在容器上