
排查 spring boot 2 应用在 docker 中异常停止的问题
本文分析 Spring Boot 2 应用在 Docker 容器中异常停止,并返回 Exited(139) 状态码,日志显示 SIGILL (0x4) 和 libawt.so 相关错误的原因及解决方法。
问题症状:容器退出码为 Exited(139),日志包含 SIGILL (0x4) at pc=0x00007f78d6c50816 和 Problematic frame: C [libawt.so+0x2d816] 等信息。
问题根源分析:该问题可能与使用 HutTool 图形验证码和基础镜像选择有关。使用 openjdk:8-jdk-alpine 作为基础镜像,虽然添加了字体库 ttf-dejavu 和 fontconfig,但该精简镜像缺少完整的图形化环境,特别是 AWT (Abstract Window Toolkit) 相关的库文件,例如 libawt_xawt.so。 libawt.so 错误和 libjawt.so 加载失败正是由于缺少这些依赖导致的。
解决方法:
更换基础镜像: 避免使用精简的 openjdk:8-jdk-alpine 镜像。选择包含完整 Java 环境和 AWT 依赖的镜像,例如一个基于 Debian 或 CentOS 的镜像。这将直接解决依赖缺失问题。
(不推荐) 在 Dockerfile 中安装依赖: 如果必须使用 openjdk:8-jdk-alpine,则需要在 Dockerfile 中添加安装 xorg-x11-utils 或其他必要 AWT 依赖的指令。但这会使镜像体积增大,并且可能需要仔细调整 Dockerfile 的构建过程,确保依赖正确安装和链接。此方法复杂且容易出错,不推荐。
其他考虑因素:
hs_err_pid1.log 文件将有助于更精确地定位问题。总结:更换基础镜像是解决此问题的最有效和推荐的方法。 避免在精简镜像中添加大量图形化依赖,这会增加复杂性和维护难度。 选择合适的镜像可以确保应用在 Docker 中稳定运行。
以上就是SpringBoot2应用在Docker中异常停止,如何排查SIGILL(0x4)错误及libawt.so问题?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号