首页 > 解决方案 > 如何动态获取 udev 创建的设备的符号链接,该设备在 docker 容器中的主机上运行

问题描述

我想动态获取 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

标签: dockerudev

解决方案


回答:

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 创建新文件将无法在重新启动后继续存在。每次运行时触摸一个文件将使包含目录的链接保留在主机上,如果创建了新链接,它将出现在容器上


推荐阅读