我如何动态获取符号链接到由 udev 运行 在 docker 容器中的主机上创建的设备

How can I dynamically get symlinks to devices created by udev running on Host in a docker container

我想动态获取指向由 udev 运行ning 在 docker 容器中的主机上创建的设备的符号链接

我能够将符号链接绑定到容器,但如果设备被移除(例如:USB 断开连接),它不会动态重新创建

Udev 规则示例:

SUBSYSTEM=="tty", ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="140c", MODE="0666", SYMLINK+="my_dir/gsm-modem0"

docker 运行 示例:

sudo docker run -v /dev/my_dir/gsm-modem0:/dev/my_dir/gsm-modem0 my_image my_script.sh

答案:

udev 规则应该 symlink 到一个新目录:

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 应该首先在创建的 symlink 目录中创建一个新文件:

mkdir -p /dev/my_dir
touch /dev/my_dir/keep

解释:

出于某种原因,如果目录为空,udev 可能会删除 link 目录,因为通常 /dev 是一个创建新文件的 tmpfs 将无法在重启后继续存在。在每个 运行 上触摸一个文件将在主机上保留 link 包含目录,如果创建了一个新的 link 它将出现在容器