buildah を使用してイメージをビルドすると、次のメッセージが表示されます。 EMFILE: 開いたファイルが多すぎます。

buildah を使用してイメージをビルドすると、次のメッセージが表示されます。 EMFILE: 開いたファイルが多すぎます。

実行すると、buildah bud次のエラーが発生します。

npm ERR! code EMFILE
npm ERR! syscall open
npm ERR! path /root/.npm/_cacache/index-v5/cd/a5/aca06eccd914d83e3be09412f45e00ceac1150a83df0e32d015284f4c8f6
npm ERR! errno -24
npm ERR! EMFILE: too many open files, open '/root/.npm/_cacache/index-v5/cd/a5/aca06eccd914d83e3be09412f45e00ceac1150a83df0e32d015284f4c8f6'

この問題をどのように解決できますか?

答え1

この問題は次の方法で解決できます。この方法は--ulimit

buildah bud --ulimit nofile=4096:4096

説明--ulimit nofile=4096:4096

このオプションは次のとおりです。buildah build

--ulimit type=soft-limit[:hard-limit]

RUNコマンドの処理時に開始されたプロセスに適用されるリソース制限を指定します。このオプションは複数回指定できます。認識されるリソースの種類は次のとおりです。

  • "core": 最大コアダンプサイズ( ulimit -c)
  • "cpu": 最大 CPU 時間( ulimit -t)
  • "data": プロセスデータセグメントの最大サイズ( ulimit -d)
  • "fsize":新しいファイルの最大サイズ(ulimit -f
  • "locks": 最大ファイルロック数( ulimit -x)
  • "memlock": ロックされたメモリの最大量( ulimit -l)
  • "msgqueue":メッセージキューの最大データ量(ulimit -q
  • 「nice」:親和性調整(nice -n、ulimit -e)
  • "nofile": 最大オープンファイル数( ulimit -n)
  • "nofile":開かれたファイルの最大数(1048576)。
  • ルート "nproc" によって実行される場合: 最大プロセス数( ulimit -u)
  • 「nproc」:最大プロセス数(1048576)。
  • root "rss"で実行する場合:ulimit -mプロセスの最大サイズ()
  • "rtprio":最大リアルタイムスケジューリング優先順位(ulimit -r
  • "rttime": ブロックシステムコール間の最大リアルタイム実行量
  • "sigpending": 保留中の信号の最大数( ulimit -i) "stack": 最大スタックサイズ( ulimit -s)

ソフト制限とハード制限とは何ですかman limits.conf

  • hard厳格なリソース制限を適用するために使用されます。これらの制限はスーパーユーザーによって設定され、カーネルによって強制されます。ユーザーは、システムリソースの要件をこの値以上に増やすことはできません。
  • softソフトリソース制限を適用するために使用されます。これらの制限は、ユーザーが既存のハード制限で許可されている制限内で上下に移動できる制限です。一般的なシステム使用の場合、このタグで指定された値はデフォルト値と見なすことができます。

;tldr: 開くことができるファイル数にカーネルが課すハードおよびソフト制限を設定します。

関連情報