質問: dockerでjdk8を実行すると、archlinuxで「ファイル記述子テーブルを割り当てることができません-メモリ不足」で突然壊れました 昨日システムをアップグレードした後、dockerコンテナを再起動しようとしています。 sbt(scalaビルドツール)コンテナーを実行しています。残念ながら、次のエラーで動作を停止しましたlibrary initialization failed - unable to allocate file descriptor table - out of memory/usr/share/sbt/bin/sbt-launch-lib.bash: line 46: 76 aborted (core dumped) "$@" 次に、ドッキングしたjavaアプリケーションが機能しなくなったことがわかりました。そこで、単純なtomcatを実行してみました。結果は以下のとおりです(数百行の[too many errors, abort]であるため、下部でクリップされています)。docker run -it --rm tomcat:8.0 using catalina_base: /usr/local/tomcat using catalina_home: /usr/local/tomcat using catalina_tmpdir: /usr/local/tomcat/temp using jre_home: /docker-java-home/jre using classpath: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar library initialization failed - unable to allocate file descriptor table - out of memory# # a fatal error has been detected by the java runtime environment: # # sigsegv (0xb) at pc=0x00007fb6b7b3e532, pid=1, tid=140422755079936 # # jre version: openjdk runtime environment (7.0_181-b01) (build 1.7.0_181-b01) # java vm: openjdk 64-bit server vm (24.181-b01 mixed mode linux-amd64 compressed oops) # derivative: icedtea 2.6.14 # distribution: debian gnu/linux 8.10 (jessie), package 7u181-2.6.14-1~deb8u1 # problematic frame: # c [libc.so.6+0x36532] abort+0x232 # # core dump written. default location: /usr/local/tomcat/core or core.1 # # an error report file with more information is saved as: # /usr/local/tomcat/hs_err_pid1.log # # if you would like to submit a bug report, please include # instructions on how to reproduce the bug and visit: # http://icedtea.classpath.org/bugzilla # the crash happened outside the java virtual machine in native code. # see problematic frame for where to report the bug. # 最近この投稿を見つけました。最近のarchリリースで他の誰かが同様の問題に苦しんでいる痕跡のようです https://github.com/neo4j/docker-neo4j/issues/155#issuecomment-471728441
回答: tomcatの実行は、コンテナのulimitを次のように変更するときに機能します。docker run -it --ulimit nofile=122880:122880 -m 3g --rm tomcat:8.0 私は見つけました(私の/etcフォルダーはgit repoで管理されています)行が変更されましたsystemd/system.conf 55│ #defaultlimitnofile=1024:524288 systemdがdefaultlimitnofileを変更したようで、これが私の問題を引き起こします。 この記事 dockerのulimitを設定する方法について説明します。しかし、それは私にとってそれをカットしませんでした。私は設定しなければなりませんでしたexecstart=/usr/bin/dockerd --default-ulimit nofile=65536:65536 -h fd:// の中に /etc/systemd/system/docker.serviceに注意してください--default-ulimit dockerの各呼び出しに適用されるフラグ。