Docker 如何在RancherOS中动态安装外部USB硬盘驱动器?

Docker 如何在RancherOS中动态安装外部USB硬盘驱动器?,docker,rancher,Docker,Rancher,像标题中的州一样,我已经在一个纯金属主机上安装了RancherOS,希望 动态处理外部USB硬盘驱动器的添加/删除。它应该可以作为其他容器的绑定安装进行访问。您可以执行以下操作: #udev_config.yml 写入\u文件: -路径:/etc/udev/rules.d/99-media-Storage-usb-drive.rules 货柜:udev 权限:“0644” 所有者:root 内容:| 属性{ID\u FS\u UUID}=“161E-5755”,转到=“媒体存储设备usb驱动器退

像标题中的州一样,我已经在一个纯金属主机上安装了RancherOS,希望
动态处理外部USB硬盘驱动器的添加/删除。它应该可以作为其他容器的绑定安装进行访问。

您可以执行以下操作:

#udev_config.yml
写入\u文件:
-路径:/etc/udev/rules.d/99-media-Storage-usb-drive.rules
货柜:udev
权限:“0644”
所有者:root
内容:|
属性{ID\u FS\u UUID}=“161E-5755”,转到=“媒体存储设备usb驱动器退出”
操作==“添加”\
运行{program}+=“/usr/bin/udev-mount.sh-o nodev、noexec、nosuid、uid=1100、gid=5000、umask=007$root/$name/media/Storage”
操作==“删除”\
运行{program}+=“/usr/bin/udev-umount.sh/media/Storage”
LABEL=“媒体\u存储\u usb\u驱动器\u退出”
-路径:/usr/bin/udev-mount.sh
货柜:udev
权限:“0755”
所有者:root
内容:|
#!/垃圾箱/垃圾箱
set-e
评估路径=\${$\}
system docker exec console/usr/bin/mkdir-p“$path”
系统docker exec控制台/usr/bin/mount“$@”
-路径:/usr/bin/udev-umount.sh
货柜:udev
权限:“0755”
所有者:root
内容:|
#!/垃圾箱/垃圾箱
系统docker执行控制台/usr/bin/umount“$@”
然后执行

sudo ros config merge-i udev_config.yml&&sudo ros服务重启udev
您可以拔下并插入设备,或者如果您知道自己的
DEVNAME
(见下文),例如
/dev/sdb1
,请执行

sudo系统docker exec udev udevadm trigger--action=add/dev/sdb1
这有几个部分:

动态执行硬件添加/删除操作
udev
是此作业的常用工具。具有有关其配置的信息

在上述示例中:

ATTRS{ID_FS_UUID}!="161E-5755", GOTO="media_Storage_usb_drive_exit"
ACTION=="add", \
  RUN{program}+="/usr/bin/udev-mount.sh -o nodev,noexec,nosuid,uid=1100,gid=5000,umask=007 $root/$name /media/Storage"
ACTION=="remove", \
  RUN{program}+="/usr/bin/udev-umount.sh /media/Storage"
LABEL="media_Storage_usb_drive_exit"
在其他联机示例中,您可能会看到使用了
内核
,但这可能很脆弱,因为与外部设备关联的特定名称不是静态的。这里我们使用
ID\u FS\u UUID
。通过执行
udevadm info/dev/sdb1
(作为示例),可以找到与您的设备相关联的此属性和其他属性。使用不会被覆盖或可能被其他硬盘驱动器使用的内容非常重要。此命令的其他重要信息包括
DEVPATH
DEVNAME

在RancherOS中配置
udev
。 上面的配置通常放在
/etc/udev/rules.d/
中,但我们需要将其放在正确的
/etc/udev/rules.d/

在RancherOS中,
udev
守护进程(
udevd
)作为容器运行,通过执行以下命令可见:

sudo ros服务ps

sudo系统docker ps
可以使用配置RancherOS系统容器。我们可以使用上面演示的指令将文件写入系统容器

使装载可用于
控制台
和其他衍生的docker容器。 默认情况下,
udev
容器不共享,因此我们运行提供的脚本,在
控制台
系统容器内执行mount。它具有我们需要的特性:

  • mount
    umount
    可用(与
    docker
    容器不同)
  • 媒体卷
    已装入
笔记
  • 请注意
    运行
    命令中的路径,因为非绝对路径将相对于
    /usr/lib/udev/
    进行解析
  • 您可以通过执行
    udevadm info
    查看设备的属性,例如
    udevadm info/dev/sdb1
  • 您可以在
    控制台
    容器中测试
    udev
    配置(当您ssh到RancherOS中时生成的默认容器)。您可以将文件放置在
    /etc/udev/rules.d/
    中,并使用例如
    udevadm test--action=add
    进行测试
  • 可通过
    dmesg
    (per)访问
    udevd
    的日志
    udevadm--log priority=debug
    动态设置日志级别