我正在尝试基于oracle/database:11.2.0.2-xe
(基于RHEL的Oracle Linux)构建Docker镜像,并希望更改此图像中的系统区域设置(使用RUN
中的一些Dockerfile
命令)。
根据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
来改变我的系统全局语言环境,我怎么能这样做?
根据this good guide关于在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