我更新了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-cfgcr.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方法会更容易。有关创建定制构建器的一些文章:
  • https://buildpacks.io/docs/operator-guide/create-a-builder/
  • https://medium.com/@srinivasan.surprise/unpack-cloud-native-buildpacks-9959b601424b
  • 09-30 12:21