我更新了spring-boot应用程序,以使用buildpacks创建我的docker-image而不是dockerfile。我还在我的应用程序中使用Apache POI,并且由于该更新,生成xlsx文件时出现错误。经过一番挖掘,我认为是因为缺少fontconfig
和/或ttf-dejavu
软件包而导致的。但是如何将它们添加到dockerimage中呢?使用dockerfile,我只会添加类似
RUN apt-get update && apt-get install fontconfig ttf-dejavu
但是如何使用buildpacks达到相同的目的? 最佳答案
该答案假定通过“...使用引导软件包的Spring-boot应用程序”表示您使用了spring-boot:build-image
maven目标。
问题在于maven插件使用的默认生成器(gcr.io/paketo-buildpacks/builder:base
)。构建器负责配置OS镜像,“基本”构建器不包括fontconfig
软件包。 。
启用fontconfig
包的最简单方法是使用“完整”构建器(gcr.io/paketo-buildpacks/builder:full-cf
或gcr.io/paketo-buildpacks/builder:latest
);您可以例如通过以下方式之一进行操作:
通过在maven插件中指定builder的配置参数
<project>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.3.3.BUILD-SNAPSHOT</version>
<configuration>
<image>
<builder>gcr.io/paketo-buildpacks/builder:latest</builder>
</image>
</configuration>
</plugin>
</plugins>
</build>
</project>
mvn
直接在-Dspring-boot.build-image.builder=gcr.io/paketo-buildpacks/builder:latest
命令行上。但是,这是不理想的,因为完整的操作系统镜像要大得多(在docker镜像列表中观察到,“完整”镜像大约为1.45GB,“基本”镜像为644MB),这是启用
fontconfig
的相当大的开销“正好”。一种更复杂的方法将需要使用自定义mixins创建一个自定义生成器,以便使用额外的包创建一个量身定制的“基础”镜像。但是我个人发现在这种情况下仅使用dockerfile方法会更容易。有关创建定制构建器的一些文章: