首页 > 解决方案 > spring boot gradle任务“bootBuildImage”构建的cloudfoundry buildpack docker镜像中的语言环境和编码设置如何

问题描述

当我使用 spring boot 应用程序创建 docker 映像时,我发现使用 spring boot 应用程序安装到正在运行的容器中的目录的文件名存在编码问题。bootBuildImage我按照此处所述通过 gradle 任务创建 docker 映像。

当我查看正在运行的容器时,我看到语言环境设置为 posix。在常规的 Dockerfile 中,我会运行适当的命令来设置德语 utf-8 语言环境设置。但是 Spring Boot 使用的是 Cloud Foundry 构建包,我找不到可以挂接语言环境设置的地方。如何在构建过程中调整图像的语言环境?

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-bootdockerlocalecloud-foundrybuildpack

解决方案


默认情况下,Spring Boot Gradle 插件使用Paketo 构建器镜像和运行镜像。运行映像为生成的应用程序映像提供了基础操作系统层,这就是语言环境的来源。

覆盖区域设置的一种方法是基于 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 Boot Gradle 插件配置中使用runImage属性或在命令行中使用---runImage标志覆盖默认运行映像。


推荐阅读