Debian
如何在 Docker 容器中使用 lsusb 來獲取 USB 設備描述?
在 Docker 容器中:
docker run --rm -it --privileged debian bash root@fe612fde137f:/# apt-get update && apt-get install -y usbutils && lsusb ... snip ... Bus 001 Device 001: ID 1d6b:0002 Bus 002 Device 012: ID 1a86:5512 Bus 002 Device 003: ID 0e0f:0002 Bus 002 Device 002: ID 0e0f:0003 Bus 002 Device 001: ID 1d6b:0001 root@fe612fde137f:/#
在主機上:
$ lsusb Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 002 Device 012: ID 1a86:5512 QinHeng Electronics CH341 in EPP/MEM/I2C mode, EPP/I2C adapter Bus 002 Device 003: ID 0e0f:0002 VMware, Inc. Virtual USB Hub Bus 002 Device 002: ID 0e0f:0003 VMware, Inc. Virtual Mouse Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub $
知道如何從 Docker 容器中獲取 USB 設備描述嗎?
解決方案:
usb.ids
存在,但不存在hwdb.bin
(硬體數據庫)。docker run --rm -it --privileged debian bash root@fe612fde137f:/# apt-get update && apt-get install -y usbutils && find / -type f \( -name "usb.ids" -o -name "hwdb.bin" \) /var/lib/usbutils/usb.ids root@fe612fde137f:/#
這意味著
udev
沒有安裝。要修復,apt install udev
在 debian 上。
有
/usr/share/usb.ids
(和/或[/usr]/lib/udev/hwdb.bin
如果您的發行版有)存在於容器中。如果您的容器執行良好,那麼您似乎只需要這些文件用於
lsusb
. 雖然可以將udev
要包含的包添加到容器建構過程中,但在這種情況下可能有點過分了。該
hwdb.bin
文件由systemd-hwdb update
命令動態創建,從文件中獲取/lib/udev/hwdb.d/*.hwdb
資訊/etc/udev/hwdb.d/*.hwdb
。為了使容器盡可能輕量級,您可能希望創建hwdb.bin
容器外部(或使用容器建構器主機中的文件)並將最終產品hwdb.bin
注入實際容器中。我跑
lsusb
下來strace
找出它試圖從以下位置找到hwdb.bin
文件的所有位置:openat(AT_FDCWD, "/etc/systemd/hwdb/hwdb.bin", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) openat(AT_FDCWD, "/etc/udev/hwdb.bin", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) openat(AT_FDCWD, "/usr/lib/systemd/hwdb/hwdb.bin", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) openat(AT_FDCWD, "/lib/systemd/hwdb/hwdb.bin", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) openat(AT_FDCWD, "/lib/udev/hwdb.bin", O_RDONLY|O_CLOEXEC) = 3
在容器中,您可以將
hwdb.bin
文件放入對您最有意義的任何位置。