web-dev-qa-db-ja.com

Docker HostとコンテナーのUlimits

私はこの質問に対する正解を見つけることができませんでしたが、ここにあります:

最大オープンファイル数が1024のホストがあるとします。

[root@Host]# ulimit -a
open files                      (-n) 1024

そしてそのホストで実行されているドッカーコンテナ:

[root@container]# ulimit -a
open files                      (-n) 1048576

1024個を超えるファイルを開こうとすると、コンテナーで問題が発生しますか?この場合のコンテナの実際の制限は1024ファイルになると思います。どう思いますか?

18
os11k

少し遅れましたが、ulimitの違いに関する疑問を解消したいだけです。

コンテナーの実行時に値をネット設定すると、コンテナー内に表示されるulimit値はホストOSから取得されます。問題は、ホストから同じコマンドを実行すると、なぜ異なる値が表示されるのかということです。

これは、ホストでコマンドを実行すると、ソフト制限が表示されるためです。一方、コンテナが示す値は、ホストOSのハード制限です。これは、ソフトリミットを超えることが許可されているためです。したがって、ある意味では、ハードリミットは実際には実際のリミットです。この link でulimitの詳細を確認できます。

ハード制限を表示するには、次のコマンドを入力します

ulimit -Hn

値が一致していることがわかります。

N.B。ハードリミットを超えることはできませんが、ルートである場合は増やすことができます。

11
Alim Ul Gias

実際の制限は1048576です。

このイメージの右側を見てください。これは、コンテナーが基本的に分離されたプロセスであり、同じオペレーティングシステムで実行されていることを示しています。

Containers vs. VMs

コンテナー内のすべてのシステムコールはホストOSによって直接処理されるため、表示されるulimit(1048576)はホストOSから直接取得され、これが使用される値です。

Ulimitの違いは、たとえば Docker構成 が原因である可能性があります。

VMsの場合、これは異なることに注意してください:ゲストOSは1048576の値を表示する可能性がありますが、最終的にオープンコールは1024の制限を課すホストOS)

11
user3151902