spring boot gradle task "bootBuildImage" 构建的 cloudfoundry buildpack docker image 中如何设置语言环境和编码
How can the locale and encoding set in cloudfoundry buildpack docker image built by spring boot gradle task "bootBuildImage"
当我使用 spring 启动应用程序创建 docker 映像时,我看到使用 spring 安装到 运行ning 容器中的目录的文件名存在编码问题启动应用程序。我按照 here.
中描述的 gradle 任务 bootBuildImage
创建了 docker 图像
当我查看 运行ning 容器时,我看到语言环境设置为 posix。在常规 Dockerfile 中,我会 运行 适当的命令来设置德语 utf-8 语言环境设置。但是 spring boot 正在使用 cloud foundry buildpacks,我找不到可以挂接到语言环境设置的地方。如何在构建过程中调整图像的语言环境?
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=
默认情况下,Spring Boot Gradle 插件使用 Paketo builder image and run image。 运行 图像为生成的应用程序图像提供基础 OS 层,这就是语言环境的来源。
覆盖语言环境的一种方法是根据 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
构建并标记自定义 运行 映像后,您可以在 Spring 引导 Gradle 插件中覆盖默认 运行 映像 configuration 使用 runImage
属性 或在命令行上使用 ---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>
当我使用 spring 启动应用程序创建 docker 映像时,我看到使用 spring 安装到 运行ning 容器中的目录的文件名存在编码问题启动应用程序。我按照 here.
中描述的 gradle 任务bootBuildImage
创建了 docker 图像
当我查看 运行ning 容器时,我看到语言环境设置为 posix。在常规 Dockerfile 中,我会 运行 适当的命令来设置德语 utf-8 语言环境设置。但是 spring boot 正在使用 cloud foundry buildpacks,我找不到可以挂接到语言环境设置的地方。如何在构建过程中调整图像的语言环境?
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=
默认情况下,Spring Boot Gradle 插件使用 Paketo builder image and run image。 运行 图像为生成的应用程序图像提供基础 OS 层,这就是语言环境的来源。
覆盖语言环境的一种方法是根据 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
构建并标记自定义 运行 映像后,您可以在 Spring 引导 Gradle 插件中覆盖默认 运行 映像 configuration 使用 runImage
属性 或在命令行上使用 ---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>