Dockerコンテナイメージにはroot権限がありません。

Dockerコンテナイメージにはroot権限がありません。

次のコマンドを使用してDockerコンテナ(Nvidia CUDAイメージから生成された)テストを開始しました。

docker run -i -t xxxxxx /bin/bash

ルートプロンプトが表示されますが、次の特定の操作に対する権限はまだありません。

dmesg

「権限が拒否されました」と表示されます。なぜ?

ベストアンサー1

現代のLinuxでは必ずしも最終権限を持つという意味ではありません。機能メカニズムは権限を中断し、より細かい権限制御を提供します。Dockerはこのメカニズムを使用して、特定のタスクに対する部分的な権限を個別に付与/キャンセルします。

デフォルトでは、Dockerはコンテナ化されたプロセスを起動したときにプロセスが代わりに実行されても、多くの危険な機能を削除します。ユーザー。これは、ホストカーネルがすべてのコンテナとホストシステム間で共有されるため、特権コンテナ化プロセスの一部のシステムコールが(あなたのケース)に関する情報を漏洩したり、「外部世界」に影響を与える可能性があるためです。そのため、実行時にも「Permission Denied dmesg(1)」が表示されるのです。

内部でカーネルログを取得するためにシステムdmesg(1)コールが呼び出されます。syslog(2)によるとman capabilities、このシステムコールには次の特定の機能が必要ですCAP_SYSLOG

CAP_SYSLOG (since Linux 2.6.37)
    * Perform privileged syslog(2) operations.
      See syslog(2) for information on which operations require privilege.

デフォルトでは、この機能はDockerコンテナから削除されるため、dmesg(1)コンテナでは失敗します。

イメージプロバイダーを信頼したり、セキュリティを大幅に気にしない場合は、アドインを使用してコンテナ(--cap-add syslog)を起動できます。

docker run -it --cap-add syslog nvcr.io/nvidia/cuda:9.0-devel-ubuntu16.04

これで問題が解決します。

おすすめ記事