在不使用 localectl 的情况下更改 CentOS/RHEL 中的系统区域设置?

Posted

技术标签:

【中文标题】在不使用 localectl 的情况下更改 CentOS/RHEL 中的系统区域设置?【英文标题】:Change system locale inside a CentOS/RHEL without using localectl? 【发布时间】:2019-02-23 09:12:09 【问题描述】:

我正在尝试基于oracle/database:11.2.0.2-xe(基于基于 RHEL 的 Oracle Linux)构建 Docker 映像,并希望更改此映像中的系统区域设置(在 Dockerfile 中使用一些 RUN 命令)。

根据this guide,我应该使用localectl set-locale <MYLOCALE>,但此命令失败并显示Failed to create bus connection: No such file or directory 消息。这是需要启动 SystemD 的命令的known Docker issue。

我仍然尝试启动 SystemD(使用 /usr/sbin/init 作为第一个进程以及使用 -v /sys/fs/cgroup:/sys/fs/cgroup:ro -v /run,感谢 this help)但随后 localectl set-locale 失败并出现 Could not get properties: Connection timed out 消息。

所以我现在试图避免使用localectl 来更改我的系统全局区域设置,我该怎么做?

【问题讨论】:

【参考方案1】:

根据this good guide on setting locale on Linux,我应该使用

localedef -c -i fr_FR -f ISO-8859-15 fr_FR.ISO-8859-15

但是这个命令失败了

cannot read character map directory `/usr/share/i18n/charmaps': No such file or directory`

这个SO reply 表示可以使用yum reinstall glibc-common -y 来解决这个问题,并且成功了。

所以我最后的工作Dockerfile 是:

RUN yum reinstall glibc-common -y && \
  localedef -c -i fr_FR -f ISO-8859-15 fr_FR.ISO-8859-15 && \
  echo "LANG=fr_FR.ISO-8859-15" > /etc/locale.conf

ENV LANG fr_FR.ISO-8859-15

【讨论】:

对于 ol8 (ORACLE Linux) oraclelinux8: microdnf install glibc-langpack-ru localedef -i ru_RU -f UTF-8 ru_RU.UTF-8 echo "LANG=ru_RU.UTF-8" > /etc/locale.conf 对于俄语 (русской) 区域设置 openjdk:11.0.11-oracle docker 容器 export LANG=ru_RU.UTF-8ENV LANG ru_RU.UTF-8Dockerfile跨度>

以上是关于在不使用 localectl 的情况下更改 CentOS/RHEL 中的系统区域设置?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不更改输入内容的情况下更改输入值

如何在不更改浏览器历史记录的情况下更改 url

在不更改 url 的情况下访问脚本

如何在不更改 matplotlib 默认值的情况下使用 seaborn?

在不使用 Tint 的情况下更改 NavigationBar 和系统颜色

React - 在不使用 setState 的情况下更改状态:必须避免吗?