私は理論的には--privileged
フラグを使用してこれが可能であると思います。このことは、すべてのホストデバイスにアクセスできるようにするためです。 usbutilsまたはそれに類するもの(Image Distributionに依存します)をインストールすると、lsusb
を実行している特権を持つコンテナがホットプラグされたデバイスを見ることができます。 残念ながら、/ devの下に表示されません。これらの記述子の作成をスクリプト化し、/ devのもとであなたのソフトウェアによって適切に処理されるようにすることは、残念なことに公正に関与することになります。それはあなたのデバイスのためにその方法である必要はありません。
最初の試みとして、mknodを使用して作成することができます。
が
Bus 003 Device 002: ID 0bb4:0f25 HTC (High Tech Computer Corp.) One M8
は記述のための正しいフォルダに移動します:、単にlsusbがでホットプラグデバイスのためのラインをチェック は、私は私のHTCの携帯電話でこれを試してみた、それは一種の(ここでは関係ありません詳細は)働いた
cd /dev/bus/usb/003
は、既存の記述子からカーネルでUSBドライバのメジャーバージョンを確認します
[email protected]:/dev/bus/usb/003# ls -la
total 0
drwxr-xr-x 2 root root 160 Dec 26 13:40 .
drwxr-xr-x 6 root root 120 Dec 26 13:30 ..
crw-rw-r-- 1 root root 189, 256 Dec 26 13:30 001
crw-rw-r-- 1 root root 189, 258 Dec 26 13:30 003
crw-rw-r-- 1 root root 189, 259 Dec 26 13:30 004
crw-rw-r-- 1 root root 189, 260 Dec 26 13:30 005
crw-rw-r-- 1 root root 189, 261 Dec 26 13:30 006
=> 189 :) =>会釈を作成し、やっている間そうマイナーバージョン0
mknod 002 c 189 0
=>少なくともlsusb -v
を使用今デバイスを開くことが可能です。いくつかの例外を除けば、ほとんどのハードウェアで同じように動作するはずです。
Dockerとコンテナ化の精神の中で、おそらく低速ですが確かに安全ですが、ホット・マウント時にコンテナを使用してデバイスをアクセスし、デバイスをメイン・コンテナと共有する方法tcp経由でsocat tty経由であなたのビデオアプリを走らせる。
ホストで/ dev/video0をホットプラグすると、そのデバイスがそのイベントにマウントされている新しいコンテナをスピンアップできます。このコンテナは、(それがsocatに関するインストールされている)を実行できます。今すぐ
socat pty,link=/dev/video0,waitslave tcp:video0-server:54321
あなたがする必要があります。この事を想定し
は
socat tcp-l:54321,reuseaddr,fork file:/dev/video0,nonblock,waitlock=/var/run/video0.lock
あなたが今を介してクライアントにvideo0の記述子を作成することができ、ホスト名video0-サーバーを持っていますデバイスをうまく使うことができます。多くのデバイスでは、socatオーバーヘッドは私が考えるべき問題ではありません。 ネットワークを介してメインコンテナと動的に通信する複数のコンテナを介してスクリプトを作成することはオプションであり、オーバーヘッドによってパフォーマンスに有意な影響はありません。後者のオプションは、私の意見では--privileged
モードよりもきれいで安全です。
--deviceフラグの問題は、デバイスがまだ存在しない場合に失敗することです。私は、4つのUSBウェブカメラと4つのSDカードが定期的にサーバーからプラグ/プラグが抜かれ、いくつかのDockerアプリケーションがウェブカメラに接続し、データをカードに保存している非常に複雑なセットアップをしています。 – Ryan
ああ、そうだ。それは確かにかなり複雑で、私はDockerがこのような状況をまだ明らかにしているのかどうかはわかりません。 私があなたに与えることができる唯一のアドバイスは、それが可能であれば単純化することですが、あなたの他の制約に適合しないかもしれません。 – Auzias