如何设置 Debian/Ubuntu Docker 容器中的区域设置?

我正在运行一个 Ubuntu Docker 容器。我有一个挪威键盘,需要使用挪威字符(øæå)。

我的终端字符编码设置为 UTF-8,我使用 SSH 连接到我的容器。但是,我不能键入挪威字符,也不能复制和粘贴挪威字符,也不能使用 CTL + SHIFT + U + 00 f8。

我试过:

locale-gen nb_NO.UTF-8

如何在 Docker 容器中设置语言环境和键盘?

184704 次浏览

在你的 Dockerfile 中加入一些改编自

# Set the locale
RUN sed -i '/en_US.UTF-8/s/^# //g' /etc/locale.gen && \
locale-gen
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8

如果您运行 Debian 或 Ubuntu,还需要安装 locales才能使用 locale-gen

apt-get -y install locales

这篇文章摘自一篇非常好的文章

Http://jaredmarkell.com/docker-and-locales/

使用 Debian 的用户还必须安装 locales软件包。

RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y locales


RUN sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen && \
dpkg-reconfigure --frontend=noninteractive locales && \
update-locale LANG=en_US.UTF-8


ENV LANG en_US.UTF-8

这个 回答对我帮助很大。

只要加上

ENV LANG C.UTF-8
ENV LC_ALL C.UTF-8

你的文件夹里。(您可能需要确保安装了 locales软件包。)基本操作不需要其他任何东西。 与此同时,在 Ubuntu 之外,locale-gen不接受任何参数,这就是为什么使用它的所有“修复”都不能工作,例如在 Debian 上。Ubuntu 已经修补了 locale-gen以接受要生成的语言环境列表,但是目前这个补丁还没有在 Debian 的其他任何地方被接受。

实际上我也碰到过同样的问题,但是没有一个答案是100% 使用 Debian 的: 最新的,即使它们提供了很好的提示。

最大的区别是,您应该确保同时安装了 地点 还有 所有地点,后者已经包含 en _ US。UTF-8,所以您不必使用 本地人Dpkg-重新配置生成它。

以下是我在 Dockerfile 中所做的工作:

FROM debian:latest
RUN apt-get update
RUN apt-get install -y locales locales-all
ENV LC_ALL en_US.UTF-8
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US.UTF-8

当我不希望 Docker 映像的用户更改它们时,我不喜欢拥有 Docker 环境变量。

只要把它放在 RUN的某个地方。如果没有生成 UTF-8语言环境,那么可以执行以下命令:

export DEBIAN_FRONTEND=noninteractive
apt-get update -q -q
apt-get install --yes locales
locale-gen --no-purge en_US.UTF-8
update-locale LANG=en_US.UTF-8
echo locales locales/locales_to_be_generated multiselect en_US.UTF-8 UTF-8 | debconf-set-selections
echo locales locales/default_environment_locale select en_US.UTF-8 | debconf-set-selections
dpkg-reconfigure locales

在运行命令时使用 -e指定 LANGLC_ALL环境变量:

docker run -e LANG=C.UTF-8 -e LC_ALL=C.UTF-8 -it --rm <yourimage> <yourcommand>

没有必要修改 Dockerfile。

@ Mixel 的 回答对我们现有的基于 Ubuntu 的 Docker 映像非常有用。

但是,我们还有一个基于 centos 的 docker 映像,用于通过厨师(使用 kitchen-docker驱动程序)测试食谱。我们预先安装的其中一个软件包由于没有设置地区而无法安装。为了安装语言环境,我必须运行以下命令:

localedef -c -f UTF-8 -i en_US en_US.UTF-8
export LC_ALL=en_US.UTF-8

我从 服务器错误上的这个答案得到这个信息。

在运行以上命令作为 docker 配置的一部分之后,安装的软件包没有任何错误:

platforms:
- name: centos7
driver_config:
image: #(private image)
platform: centos
provision_command:
- localedef -c -f UTF-8 -i en_US en_US.UTF-8
- export LC_ALL=en_US.UTF-8

提示: 浏览容器文档论坛,如 码头论坛

这是一个 Debian 和 ubuntu 解决方案,添加以下到你的 Dockerfile:

RUN apt-get update && apt-get install -y locales && rm -rf /var/lib/apt/lists/* \
&& localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8
ENV LANG en_US.UTF-8

在安装 locales 包之后,你可以在安装包之前回答通常会被问到的问题(noninteractive禁用了这些问题) ,而不是重置 locale,这样包脚本就能正确地设置 locale,这个例子将 locale 设置为 English (British,UTF-8) :

RUN echo locales locales/default_environment_locale select en_GB.UTF-8 | debconf-set-selections
RUN echo locales locales/locales_to_be_generated select "en_GB.UTF-8 UTF-8" | debconf-set-selections


RUN \
apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get install -y locales && \
rm -rf /var/lib/apt/lists/*

你们不需要这些复杂的东西来设置 Ubuntu/Debian 上的 locale,你甚至不需要 /etc/local.gen文件。

简单的 locale-gen将做一切,作者只是错过了 locales包。

RUN apt-get update && apt-get install -y locales && rm -rf /var/lib/apt/lists/* \
&& locale-gen "en_US.UTF-8"
ENV LANG=en_US.UTF-8 \
LANGUAGE=en_US:en \
LC_ALL=en_US.UTF-8

我发现这是最简单和最有效的,我确认它可以在 Ubuntu 16.04上运行。

对我来说,在 Ubuntu中起作用的是:

FROM ubuntu:xenial
USER root
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update && apt-get install --no-install-recommends -y locales && rm -rf /var/lib/apt/lists/*
RUN echo "LC_ALL=en_US.UTF-8" >> /etc/environment
RUN echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen
RUN echo "LANG=en_US.UTF-8" > /etc/locale.conf

我使用了这个(在 RUN apt-get install -y python3之后) :

RUN apt-get install -y locales
RUN apt-get install -y language-pack-en
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
RUN python3 -c "print('UTF8 works nice! 👌')"

它能正确打印 UTF8 works nice! 👌

添加到“ Dockerfile”:

# Set the locale in container
RUN apt-get -y install locales
RUN sed -i '/en_US.UTF-8/s/^# //g' /etc/locale.gen && \
locale-gen
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8

好好享受吧!

对于 ubuntu 14.04,在/etc/locale.gen 中没有文件,但是它共享文件 /etc/default/locale。因此,对于可信(ubuntu 14.04) ,只需运行

RUN apt-get -y install locales && \
update-locale LANG=en_US.UTF-8

这样至少可以将全局默认语言环境从烦人的“ POSIX”更改为您想要的语言环境。

在 Debian 我不得不..。

1-编辑区域设置文件

sudo nano /etc/default/locale

2-取消注释我想在案例中使用的语言环境“ es _ ES. UTF-8UTF-8”

3-跑步:

sudo locale-gen

希望这可以为那些在 Debian 中遇到这个问题的人节省时间。