【问题标题】:Change system locale inside a CentOS/RHEL without using localectl?在不使用 localectl 的情况下更改 CentOS/RHEL 中的系统区域设置?
【发布时间】: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 来更改我的系统全局区域设置,我该怎么做?

【问题讨论】:

    标签: docker locale systemd rhel


    【解决方案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跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-31
    • 1970-01-01
    • 2011-09-12
    • 1970-01-01
    相关资源
    最近更新 更多