私はこの質問に対する正解を見つけることができませんでしたが、ここにあります:
最大オープンファイル数が1024のホストがあるとします。
[root@Host]# ulimit -a
open files (-n) 1024
そしてそのホストで実行されているドッカーコンテナ:
[root@container]# ulimit -a
open files (-n) 1048576
1024個を超えるファイルを開こうとすると、コンテナーで問題が発生しますか?この場合のコンテナの実際の制限は1024ファイルになると思います。どう思いますか?
少し遅れましたが、ulimitの違いに関する疑問を解消したいだけです。
コンテナーの実行時に値をネット設定すると、コンテナー内に表示されるulimit値はホストOSから取得されます。問題は、ホストから同じコマンドを実行すると、なぜ異なる値が表示されるのかということです。
これは、ホストでコマンドを実行すると、ソフト制限が表示されるためです。一方、コンテナが示す値は、ホストOSのハード制限です。これは、ソフトリミットを超えることが許可されているためです。したがって、ある意味では、ハードリミットは実際には実際のリミットです。この link でulimitの詳細を確認できます。
ハード制限を表示するには、次のコマンドを入力します
ulimit -Hn
値が一致していることがわかります。
N.B。ハードリミットを超えることはできませんが、ルートである場合は増やすことができます。
実際の制限は1048576です。
このイメージの右側を見てください。これは、コンテナーが基本的に分離されたプロセスであり、同じオペレーティングシステムで実行されていることを示しています。
コンテナー内のすべてのシステムコールはホストOSによって直接処理されるため、表示されるulimit(1048576)はホストOSから直接取得され、これが使用される値です。
Ulimitの違いは、たとえば Docker構成 が原因である可能性があります。
(VMsの場合、これは異なることに注意してください:ゲストOSは1048576の値を表示する可能性がありますが、最終的にオープンコールは1024の制限を課すホストOS)