使用buildpack构建的Spring Boot Docker镜像无法加载字体如何解决
解决方案
方案1:使用Bellsoft Liberica JDK的Full变体
Bellsoft Liberica buildpack支持通过环境变量指定JVM变体,Full版本已经内置了fontconfig以及常用字体库,无需额外安装系统包。你只需要在执行构建命令时传入对应的环境变量即可:
gradlew bootBuildImage --env BP_JVM_VERSION=17 --env BP_LIBERICA_JVM_TYPE=full
调整BP_JVM_VERSION为你实际使用的JDK版本即可生效。
方案2:结合Apt Buildpack安装指定依赖
如果不想使用Full版JVM,可以在构建时引入Apt buildpack,直接指定要安装的系统包:
首先修改build.gradle中的bootBuildImage配置,调整buildpack顺序并传入安装参数:
bootBuildImage { buildpacks = [ "gcr.io/paketo-buildpacks/apt", "gcr.io/paketo-buildpacks/bellsoft-liberica", "gcr.io/paketo-buildpacks/spring-boot" ] environment = [ "BP_APT_PACKAGES" : "fontconfig ttf-dejavu" ] }
配置完成后正常执行gradlew bootBuildImage,构建过程中会自动安装指定的两个依赖包。
方案3:自定义运行时基础镜像
如果上述方案都不符合需求,可以基于Paketo官方基础运行镜像,提前安装好字体相关依赖,再使用自定义镜像作为构建的基础Stack,该方案适合需要批量为多个应用添加相同系统依赖的场景。
内容的提问来源于stack exchange,提问作者Bartosz Bilicki
相关产品推荐
相关产品推荐

