docker - 如何动态获取 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
解决方案
回答:
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 创建新文件将无法在重新启动后继续存在。每次运行时触摸一个文件将使包含目录的链接保留在主机上,如果创建了新链接,它将出现在容器上
推荐阅读
- python-3.x - 如何在 init() 中保存用户输入字符串
- windows - 从命令行强制刷新(重新扫描)无线网络?
- reactjs - componentWillUnmount 什么时候真正触发
- java - 游标因 CursorIndexOutOfBoundsException 而崩溃
- ruby - 如何从 Ruby 2.4 中的哈希生成可靠的摘要?
- mysql - 如何在 MySQL 5.7 中组织这个查询?
- r - 在 ggplot2 中使用 scale_color_manual 时,绘图中的中断和值不匹配
- javascript - Javascript 如果存在则更新数组值,否则将新数组推送到对象
- php - 致命错误:调用未定义函数 random_bytes() 错误
- typescript - 尝试使用 Typescript 条件类型来缩小可以预期的值的可能组合