需要将哪些文件复制到 Ubuntu docker 镜像中以支持 da_DK.UFT-8 语言环境?

需要将哪些文件复制到 Ubuntu docker 镜像中以支持 da_DK.UFT-8 语言环境?

我们有一个 docker 镜像,它针对后端运行 Newman 查询来验证一切是否符合预期。现在我们有了一个新的需求,即测试包含丹麦语字符的响应是否以丹麦语正确排序。

最简单的方法是使用 da_DK.UTF-8 将语言环境设置为丹麦语,一切正常,但我们迄今为止使用的图像尚未安装此语言环境。

这个问题解释了如何设置语言环境,但它是通过安装新程序来实现的 -https://stackoverflow.com/questions/66859800/bin-bash-warning-setlocale-lc-all-cannot-change-locale-en-us-utf-8- 我认为可能只需从已填充的系统中复制所需的数据文件就足够了。

取样一行代码来验证事情是否按我们所需的方式进行:

root@2e4c326b456e:/etc/newman# (echo aa ;echo b; echo a)| LC_ALL=da_DK.UTF-8 sort| xargs echo
a b aa

为了实现此功能需要复制哪些文件?

答案1

Ubuntu 中的区域设置略显复杂。从man locale-gen

By  default,  the locale package which provides the base support for localisation of libc-
based programs does not contain usable localisation files for  every  supported  language.
This limitation has became necessary because of the substantial size of such files and the
large number of languages supported by libc. As a result, Debian uses a special  mechanism
where  we prepare the actual localisation files on the target host and distribute only the
templates for them.

根据man localedef,生成的定位数据保存在 中 /usr/lib/locale/locale-archive

因此你可以尝试如下方法:

FROM ubuntu:22.04 AS base

RUN export DEBIAN_FRONTEND=noninteractive; apt-get update; \
    apt-get install locales; \
    locale-gen da_DK.UTF-8

FROM ubuntu:22.04 AS final

COPY --from=base /usr/lib/locale/locale-archive /usr/lib/locale/locale-archive

在基于使用以下命令构建的图像的容器中:

root@3a19ac3cde1c:/# (echo aa ;echo b; echo a) | LC_ALL=da_DK.UTF-8 sort | xargs echo ; (echo aa ;echo b; echo a)| sort | xargs echo
a b aa
a aa b

但我不确定这是否适用于所有情况。

相关内容