如何更改 Fedora Docker 容器的区域设置?

How to change locale settings on Fedora Docker container?

在普通服务器上,例如Linode VPS 我通常会这样做:

localectl set-locale LANG=<locale>.utf8
timedatectl set-timezone <timezone>

但是由于 systemd 不存在或不适用于容器,我得到:

Failed to create bus connection: No such file or directory

现在,我的目标只是更改这些设置而不使用 systemd,但这种方法似乎没有记录。是否有配置工具的非 systemd 替代品的参考?

arch wiki 中关于语言环境设置的一些文档:https://wiki.archlinux.org/index.php/locale

在 Dockerfile 中,将 LANG 调整为您想要的语言环境。您可以在 /etc/locale.gen 中添加多个语言环境,以便稍后进行选择。

适用于 debian、arch,但 locale-gen 无法适用于 fedora:

ENV LANG=en_US.utf8
RUN echo "$LANG UTF-8" >> /etc/locale.gen
RUN locale-gen
RUN update-locale --reset LANG=$LANG

更通用的是 localedef,也适用于软呢帽:

ENV LANG=en_US.UTF-8
localedef --verbose --force -i en_US -f UTF-8 en_US.UTF-8

将此放入您的 Dockerfile

ENV TZ=America/Denver
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

从 root 编辑 .bash_profile 或 .bashrc 并添加以下内容。

TZ='Asia/Kolkata'
export TZ

完成后保存文件并提交图像。

基于 sti-base 中使用的技术,我为 https://github.com/ncoghlan/fedbuildenv/blob/09a18d91e7af64a45394669bac2595a4b628960d/Dockerfile#L26 提出了以下解决方法:

# Set a useful default locale
RUN echo "export LANG=en_US.utf-8" > /opt/export_LANG.sh
ENV BASH_ENV=/opt/export_LANG.sh \
    ENV=/opt/export_LANG.sh \
    PROMPT_COMMAND="source /opt/export_LANG.sh"

BASH_ENV 涵盖非交互式 bash 会话,ENV 涵盖 sh 会话,PROMPT_COMMAND 涵盖交互式 bash 会话。

这似乎是 debians 的 locale-gen:

RUN localedef -v -c -i fr_FR -f UTF-8 fr_FR.UTF-8 || true