Spring boot 如何在spring boot gradle任务构建的cloudfoundry buildpack docker映像中设置区域设置和编码;bootBuildImage";

Spring boot 如何在spring boot gradle任务构建的cloudfoundry buildpack docker映像中设置区域设置和编码;bootBuildImage";,spring-boot,docker,locale,cloud-foundry,buildpack,Spring Boot,Docker,Locale,Cloud Foundry,Buildpack,当我用spring boot应用程序创建docker映像时,我看到了在spring boot应用程序装入运行容器的目录的文件名中存在编码问题。我通过gradle任务bootBuildImage创建docker映像,如下所述 当我查看正在运行的容器时,我看到区域设置被设置为posix。在常规Dockerfile中,我将运行适当的命令来设置德语utf-8语言环境设置。但是SpringBoot使用的是CloudFoundryBuildPack,我找不到地方可以连接到语言环境设置。如何在生成过程中调整图

当我用spring boot应用程序创建docker映像时,我看到了在spring boot应用程序装入运行容器的目录的文件名中存在编码问题。我通过gradle任务
bootBuildImage
创建docker映像,如下所述

当我查看正在运行的容器时,我看到区域设置被设置为posix。在常规Dockerfile中,我将运行适当的命令来设置德语utf-8语言环境设置。但是SpringBoot使用的是CloudFoundryBuildPack,我找不到地方可以连接到语言环境设置。如何在生成过程中调整图像的区域设置

cnb@9d24bfe67b9e:/$ locale
LANG=
LANGUAGE=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=

默认情况下,SpringBootGradle插件使用。运行映像为生成的应用程序映像提供基本操作系统层,这就是区域设置的来源

覆盖区域设置的一种方法是基于Paketo运行映像生成自定义运行映像,并在自定义运行映像中设置区域设置。自定义运行映像的Dockerfile可能如下所示:

FROM paketobuildpacks/run:base-cnb

USER root
RUN apt-get install -y locales
RUN locale-gen de_DE.utf8
ENV LANG de_DE.UTF-8
ENV LANGUAGE de_DE:de
ENV LC_ALL de_DE.UTF-8

构建并标记自定义运行映像后,您可以使用
runImage
属性覆盖Spring Boot Gradle插件中的默认运行映像,或者在命令行上使用
--runImage
标志覆盖默认运行映像。

尽管我认为Scotts的答案仍然是最好的,作为替代选项,您可以为生成器图像设置环境变量,这可以控制最终图像的环境变量

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <image>
            <env>
                <BPE_DELIM_JAVA_TOOL_OPTIONS xml:space="preserve"> </BPE_DELIM_JAVA_TOOL_OPTIONS>
<BPE_APPEND_JAVA_TOOL_OPTIONS>-XX:+HeapDumpOnOutOfMemoryError</BPE_APPEND_JAVA_TOOL_OPTIONS>
            </env>
        </image>
    </configuration>
</plugin>

org.springframework.boot