在docker run最新jdk17.0时可能会出现以下错误:

[0.038s][warning][os,thread] Failed to start thread "GC Thread#0" - pthread_create failed (EPERM) for attributes: stacksize: 1024k, guardsize: 4k, detached.
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Cannot create worker GC thread. Out of system resources.
# An error report file with more information is saved as:
# /application/hs_err_pid8.log

国外相似问题:

https://github.com/adoptium/temurin-build/issues/2976

https://stackoverflow.com/questions/74443957/insufficient-memory-while-running-eclipse-temurin17-jdk-docker-image

有国外大佬详细分析过本质原因,见以下链接:

https://github.com/adoptium/containers/issues/215#issuecomment-1142046045

白话文:

本质上是docker的默认seccomp安全配置造成的,最新版的ubuntu LTS 22.04镜像用到了部分新的函数,而在旧版本docker配置中没有这些函数。

解决方法:

  1. 永久解决方法:最新版本docker修复了这个问题,更新最新版本docker即可。

  2. 如果没有条件更新docker,则可使用临时解决方案,增加参数--security-opt seccomp=unconfineddocker run命令后面,表示运行没有默认seccomp配置文件的容器,以允许调用所有函数。(详见文档) 建议这种方案,最小改动

    docker run -it -d --name 容器名 --security-opt seccomp=unconfined 镜像名
  3. 如果是自定义镜像,修改Dockerfile文件,降级你的基准镜像到ubuntu LTS 20.04 Focal,降级你的jdk版本。

文章作者: 小明同学
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 小明同学的博客
linux docker
喜欢就支持一下吧