SELinuxを使用して複数のコンテナ間でホストディレクトリを共有する

SELinuxを使用して複数のコンテナ間でホストディレクトリを共有する

Dockerコンテナとホストディレクトリを共有するのは通常簡単です。

$ docker create -v /path/to/hostdir:/path/inside/container --name conta ...

SELinux が関係する場合、状況はより複雑になります。たとえば、SELinuxはSELinuxを実行しているのと同じDockerホスト(Fedora 23でもあります)でFedora 23コンテナを実行します。

この場合、明らかにdockerにラベルを再割り当てするように指示する必要があります。

$ docker create -v /path/to/hostdir:/path/inside/container:Z --name conta ...

サフィックスがない場合、:Z共有ホストディレクトリからファイルを読み書きしようとすると、権限拒否エラーが発生します。すべてが:Z期待どおりに動作します。

:Zただし、ホストディレクトリを共有する必要がある場合、メソッドは失敗します。多くの種類(SELinux強制)同時コンテナ:

$ docker create -v /path/to/hostdir:/path/inside/container:Z --name conta ...
$ docker create -v /path/to/hostdir:/path/inside/container:Z --name contb ...

2番目のコマンド以降、「contb」はホストディレクトリにアクセスできますが、「conta」はホストディレクトリにアクセスできなくなりました(許可拒否エラー)。

dockerの2番目のタグの再割り当ては、最初のタグを無効にするようです。

SELinuxシステムでこの問題を解決するには?

ベストアンサー1

今はドッカーを使用していないので、役に立つかどうかはわかりませんが、これらの技術に非常に近いです。

持つ良い記事Dan Walshは、コマンド間の違い:Zとコマンド内の違いについて説明しています。:zdocker

TL;DR、最初の ( :Z) は、マルチカテゴリーセキュリティ (MCS) ラベルを使用することです。これにより、異なるコンテナに対して異なるカテゴリで同じラベルが作成されます。

2番目のエントリ(:z)は、すべてのコンテナに対して同じラベルでディレクトリにラベルを付け、同時にパスにアクセスできる必要があります。

それでも役に立たない場合は、dockerから入手したAVCを提供してください。それ以外の場合は推測と同じです。

おすすめ記事