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

Ant*_* O. 9 locale rhel systemd docker

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

根据本指南,我应该使用localectl set-locale <MYLOCALE>,但此命令失败并显示Failed to create bus connection: No such file or directory消息。对于需要启动 SystemD 的命令,这是一个已知的 Docker 问题。

无论如何,我尝试启动 SystemD(用作/usr/sbin/init第一个进程以及使用此帮助-v /sys/fs/cgroup:/sys/fs/cgroup:ro -v /run),但随后失败并显示消息。localectl set-localeCould not get properties: Connection timed out

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

Ant*_* O. 8

根据这个关于在 Linux 上设置区域设置的好指南,我应该使用

localedef -c -i fr_FR -f ISO-8859-15 fr_FR.ISO-8859-15
Run Code Online (Sandbox Code Playgroud)

但是这个命令失败了

cannot read character map directory `/usr/share/i18n/charmaps': No such file or directory`
Run Code Online (Sandbox Code Playgroud)

这个SO 回复表明可以用来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
Run Code Online (Sandbox Code Playgroud)

  • 它在 ubi8 中开箱即用,对我来说不起作用。要使其工作,您必须安装“glibc-locale-source”包。否则 localedef 会抱怨:`[error] 找不到字符映射文件 UTF-8:没有这样的文件或目录` (3认同)