Dockerコンテナでlsusbを使用してUSBデバイスの説明を取得するには?

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 udevDebian で進めてください。

答え1

コンテナ内に存在します/usr/share/usb.ids(および/または[/usr]/lib/udev/hwdb.binディストリビューションにコンテナがある場合)。

コンテナが正しく実行されている場合は、これらのファイルだけが必要なようですlsusbudevコンテナービルドプロセスに含めるパッケージを追加することは可能ですが、この場合は過剰になる可能性があります。

ファイルは、ファイルから情報を取得するhwdb.binコマンドによって動的に生成されます。systemd-hwdb updateコンテナをできるだけ軽くするには、コンテナの外部に作成し(またはコンテナビルダホスト上のファイルを使用して)、最終製品を実際のコンテナに注入できます。/lib/udev/hwdb.d/*.hwdb/etc/udev/hwdb.d/*.hwdbhwdb.binhwdb.bin

私はファイルを見つけようとしていたすべての場所を見つけるlsusbために走りました。stracehwdb.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最適な場所にファイルを配置できます。

関連情報