2016-04-27 13 views
3

デバイスが接続されているときにSYMLINKSを作成するためのudevルールが書かれています。ルールはホストマシン上で正常に動作していますが、これらのルールを/etc/udev/rules.dにインストールしたコンテナを起動すると、コンテナ内で動作しません。私のudevルールは、実行中のドッカー・コンテナの内部で動作しないのはなぜですか?

外部ドライブが接続されたことを検出し、対応するシンボリックリンクを作成しようとしています。/dev/sdXは、ドライブがdocker runに存在する場合にコンテナのブート時に作成されますが、実行コマンドの後には表示されず、ドライブが取り外されると消えません。

ここでは、ホストマシン上で問題なく動作例のルールです:

KERNEL=="sd?", SYMLINK+="test_%k"

+0

あなたはどんな種類のデバイスを扱いたいと思いますか、あなたのルールはどのように見えますか? –

答えて

4

私はそれを理解しました。

docker run -v=/dev:/dev(注:安全ではない)私は、インターネット上で行わ見てきたことは、ホストの/devコンテナ内部をマウントすることです

しかし、これは非常に危険であり、ほとんどいじくることにより、ホストコンピュータを破壊します(例えば擬似端末は生成できません)。

docker run -v=/dev/foo:/dev/foo

しかし、場合、私は/dev/foo/sdXのように、独自のサブディレクトリにデバイスを作成するには、ホストマシン上のudevのルールを設定し、私は、ちょうど私のコンテナでdev/fooを共有することができます

今、私のudevルールに一致するドライブを挿入すると、ホストマシンは/dev/foo/sdXというシンボリックリンクを作成します。これは私のコンテナに突然表示されます。ドライブを取り外すと、/dev/foo/sdXも消えます。


デバイスが作成されたときにコンテナ内のスクリプトをトリガする機能が欠けていることがあります。 udevルールはホストマシン上で行うことができますが、udevルールはコンテナ内でトリップされないようです。手動でポーリングするのは、今のところです。

1

それはあなたが扱うしたいデバイスの種類によって異なります。コンテナ内の

のudevは、特に、最新のリンクは状況をデバッグする方法のヒントを与える

  • http://dummdida.tumblr.com/post/118770655240/udev-events-in-containershttps://groups.google.com/forum/#!topic/docker-user/n4Xtvsb4RAw
  • https://docs.docker.com/engine/reference/commandline/daemon/
  • How can enable udev sync successfully in docker?
    • に記載されています。

      あなたが使用してのudevに関連したイベントを監視することができます

      $ udevadm monitor 
      

      を、楽しみのためにあなたが呼び出すことでイベントをトリガすることができます

      $ udevadm trigger --subsystem=net --action=change 
      

      ドッキングウィンドウではないのでudevのためのドッキングウィンドウのサポートは明らかに限られていますすべての面で仮想化環境のように機能します。

  • +0

    元の質問を更新して例を挙げました。 – Ryan

    +0

    'udevadm monitor'でイベントを見ることができますが、私のルールはこれらのコマンドのどれでもトリガされません。 – Ryan

    +0

    私は実行可能な解決策を考え出しました。私の答えを見てください。 – Ryan

    関連する問題