如何更改 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
在普通服务器上,例如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