2017-06-23 13 views
1

USBカメラを使用してRaspberry Pi(RPi)で写真を撮る非常に簡単なスクリプトを作成しました。ユーザー権限とUSBデバイスを持つドッカーコンテナを起動する

複数のRPiに展開するのを助けるために、私はドッカーを使いたがっていました。私はすべてのT時間が、私はコンテナを起動したとき、私はマウントされたホストパーティションに保存する写真を撮る:

私はまさに私が何をしたいん画像を作りました。

事は私は私がRPIにログインするために使用するユーザーの権限を持っているために、画像を望んでいたので、私のメインのコンピュータにこれらの写真を送信するために、時にはたいです(ところで、それはpythonopencvを使用します)。

だから私は、私はこのようなものを使用するコンテナを作成するとき:

docker run -d --name container_name \ 
     -v /home/user/images:/home/images \ 
     -u $(id -u):$(id -g) \ 
     --device /dev/video0 \ 
     image_name 

事がある、それはユーザ権限でディレクトリとファイルを作成してもん、私はこれ以上のUSBカメラを読み取ることができません。

私はカメラを読み取ることができますが、ファイル/ディレクトリがルートとしてを作成され、後の画像を取得するために、問題を引き起こす-u引数を削除した場合。ところで

この プロジェクトをしている間いずれかがより効率的に をこれを行う方法のアイデアを持っているなら、私に知らせてくださいので、私はちょっとドッキングウィンドウする新しい学習しています!

私は群れを作るために最初にしようとした(より簡単に画像を更新する)が、 はそれでデバイスを使用する難しさに達しました。

答えて

0

デバイスに必要なアクセス権を確認しましたか?彼らは通常、グループによってアクセス可能です。 -uを使用して実行すると、グループはid -gで返されます。

私はまた、デバイスにアクセスし、開発専用コンテナからファイルを作成し、デバイスにアクセスするために必要なグループをincluing、コンテナ内の専用ユーザーを作成することで、この問題を解決しました。ここで

私はDockerfileで私の開発コンテナのため、このユーザーを作成する方法である:

# Create a non-root user with the same uid as on the host to allow proper file 
# permissions created from the container in volumes. Since it is not root, allow 
# calling sudo without password when required. 
ARG uid 
RUN useradd -M --uid $uid --user-group user --groups uucp \ 
    && echo 'user ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers.d/user \ 
    && echo 'Defaults exempt_group+=user' >> /etc/sudoers.d/user \ 
    && chmod a=r,o= /etc/sudoers.d/user 
USER user 

これらdockerfile命令は、独自のユーザー・グループと、root以外のユーザーを作成し、uucpグループにして、それを含んでいますdebianのTTYデバイスにアクセスします。ユーザーIDはドッキング・ビルド引数として渡されます(指示ARG uid、ドッキング・ビルド・オプション--build-arg uid=$(id -u))。私は、パスワードなしでsudoerとして追加し(主に、時にはパッケージ管理コマンドを実行し、いくつかのことをしようとすることができるようにします)。

関連する問題