据我所知,
Docker没有任何方法让容器访问主机串行或USB端口
..。有什么技巧可以做到这一点吗?
发布于 2019-11-08 19:24:56
我们很难将一个特定的USB设备绑定到一个也是特定的docker容器上。如您所见,推荐的实现方式是:
docker run -t -i --privileged -v /dev/bus/usb:/dev/bus/usb ubuntu bash它会将所有设备绑定到这个容器。这不安全。每个容器都被授权操作所有的容器。
另一种方法是通过devpath绑定设备。它可能看起来像:
docker run -t -i --privileged -v /dev/bus/usb/001/002:/dev/bus/usb/001/002 ubuntu bash或者
(更好,不
):
docker run -t -i --device /dev/bus/usb/001/002 ubuntu bash安全多了。但实际上很难知道特定设备的devpath是什么。
我写了这个repo来解决这个问题。
https://github.com/williamfzc/usb2container
部署此服务器后,您可以通过HTTP请求轻松获取所有已连接设备的信息:
curl 127.0.0.1:9410/api/device并获取:
{
"/devices/pci0000:00/0000:00:14.0/usb1/1-13": {
"ACTION": "add",
"DEVPATH": "/devices/pci0000:00/0000:00:14.0/usb1/1-13",
"DEVTYPE": "usb_device",
"DRIVER": "usb",
"ID_BUS": "usb",
"ID_FOR_SEAT": "xxxxx",
"ID_MODEL": "xxxxx",
"ID_MODEL_ID": "xxxxx",
"ID_PATH": "xxxxx",
"ID_PATH_TAG": "xxxxx",
"ID_REVISION": "xxxxx",
"ID_SERIAL": "xxxxx",
"ID_SERIAL_SHORT": "xxxxx",
"ID_USB_INTERFACES": "xxxxx",
"ID_VENDOR": "xxxxx",
"ID_VENDOR_ENC": "xxxxx",
"ID_VENDOR_FROM_DATABASE": "",
"ID_VENDOR_ID": "xxxxx",
"INTERFACE": "",
"MAJOR": "189",
"MINOR": "119",
"MODALIAS": "",
"PRODUCT": "xxxxx",
"SEQNUM": "xxxxx",
"SUBSYSTEM": "usb",
"TAGS": "",
"TYPE": "0/0/0",
"USEC_INITIALIZED": "xxxxx",
"adb_user": "",
"_empty": false,
"DEVNAME": "/dev/bus/usb/001/120",
"BUSNUM": "001",
"DEVNUM": "120",
"ID_MODEL_ENC": "xxxxx"
},
...
}并将它们绑定到您的容器上。例如,您可以看到此设备的DEVNAME为
docker run -t -i --device /dev/bus/usb/001/120 ubuntu bash也许这会有所帮助。
https://stackoverflow.com/questions/24225647
复制相似问题