在不使用 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-8
或 ENV LANG ru_RU.UTF-8
到 Dockerfile
跨度>
以上是关于在不使用 localectl 的情况下更改 CentOS/RHEL 中的系统区域设置?的主要内容,如果未能解决你的问题,请参考以下文章
如何在不更改 matplotlib 默认值的情况下使用 seaborn?