如何在 Debian/Ubuntu Docker 容器中设置语言环境?
How to set the locale inside a Debian/Ubuntu Docker container?
我是 运行 一个 Ubuntu Docker 容器。我有挪威语键盘,需要使用挪威语字符 (øæå)。
我的终端字符编码设置为 UTF-8,并且我使用 SSH 连接到我的容器。但是,我无法输入挪威语字符,也无法复制和粘贴挪威语字符,也无法使用 CTL+SHIFT+U+00f8。
我试过了:
locale-gen nb_NO.UTF-8
但没有任何改变。如何在 Docker 容器中设置语言环境和键盘?
将改编自
的内容放入您的 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
这是从post关于那个主题的非常好的文章中摘录的,来自
使用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
这个answer对我帮助很大。
只需添加
ENV LANG C.UTF-8
ENV LC_ALL C.UTF-8
进入你的 Dockerfile。 (您可能需要确保安装了 locales
软件包。)基本操作不需要其他任何东西。
同时,在 Ubuntu 之外,locale-gen
不接受任何参数,这就是为什么 none 使用它的“修复”起作用的原因,例如在 Debian 上。 Ubuntu have patched locale-gen
to accept a list of locales to generate 但目前该补丁尚未在 Debian 或其他任何地方被接受。
我实际上碰巧遇到了同样的问题,但是 none 提供的答案是 100% 使用 debian:latest,即使他们提供了很好的提示。
最大的区别是你应该确保locales 和 locales-all 已安装,后者已包含 en_US.UTF-8,因此您不必使用 local-gen 或 [= 生成它30=].
以下是我在 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
指定 LANG
和 LC_ALL
环境变量:
docker run -e LANG=C.UTF-8 -e LC_ALL=C.UTF-8 -it --rm <yourimage> <yourcommand>
不需要修改Dockerfile。
@Mixel 的 对我们拥有的基于 Ubuntu 的 docker 图像非常有效。
然而,我们也有一个基于 centos 的 docker 图像,用于通过 chef 测试食谱(使用 kitchen-docker
驱动程序)。由于未设置语言环境,我们预装的其中一个软件包安装失败。为了安装语言环境,我必须 运行 以下内容:
localedef -c -f UTF-8 -i en_US en_US.UTF-8
export LC_ALL=en_US.UTF-8
我从 this answer on ServerFault 那里得到了这些信息。
在 运行 将上述命令作为 docker 配置的一部分后,安装的软件包没有任何错误。来自 .kitchen.yml
:
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
提示:浏览容器文档论坛,例如 Docker Forum。
这是一个 solution for 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
禁用),以便软件包脚本设置语言环境正确地,此示例将语言环境设置为英语(英国,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 上的语言环境。你甚至不需要 /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
。所以对于 trusty(ubuntu 14.04),只需 运行
RUN apt-get -y install locales && \
update-locale LANG=en_US.UTF-8
这样至少全局默认语言环境从烦人 'POSIX' 更改为您想要的语言环境。
我是 运行 一个 Ubuntu Docker 容器。我有挪威语键盘,需要使用挪威语字符 (øæå)。
我的终端字符编码设置为 UTF-8,并且我使用 SSH 连接到我的容器。但是,我无法输入挪威语字符,也无法复制和粘贴挪威语字符,也无法使用 CTL+SHIFT+U+00f8。
我试过了:
locale-gen nb_NO.UTF-8
但没有任何改变。如何在 Docker 容器中设置语言环境和键盘?
将改编自
的内容放入您的 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
这是从post关于那个主题的非常好的文章中摘录的,来自
使用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
这个answer对我帮助很大。
只需添加
ENV LANG C.UTF-8
ENV LC_ALL C.UTF-8
进入你的 Dockerfile。 (您可能需要确保安装了 locales
软件包。)基本操作不需要其他任何东西。
同时,在 Ubuntu 之外,locale-gen
不接受任何参数,这就是为什么 none 使用它的“修复”起作用的原因,例如在 Debian 上。 Ubuntu have patched locale-gen
to accept a list of locales to generate 但目前该补丁尚未在 Debian 或其他任何地方被接受。
我实际上碰巧遇到了同样的问题,但是 none 提供的答案是 100% 使用 debian:latest,即使他们提供了很好的提示。
最大的区别是你应该确保locales 和 locales-all 已安装,后者已包含 en_US.UTF-8,因此您不必使用 local-gen 或 [= 生成它30=].
以下是我在 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
指定 LANG
和 LC_ALL
环境变量:
docker run -e LANG=C.UTF-8 -e LC_ALL=C.UTF-8 -it --rm <yourimage> <yourcommand>
不需要修改Dockerfile。
@Mixel 的
然而,我们也有一个基于 centos 的 docker 图像,用于通过 chef 测试食谱(使用 kitchen-docker
驱动程序)。由于未设置语言环境,我们预装的其中一个软件包安装失败。为了安装语言环境,我必须 运行 以下内容:
localedef -c -f UTF-8 -i en_US en_US.UTF-8
export LC_ALL=en_US.UTF-8
我从 this answer on ServerFault 那里得到了这些信息。
在 运行 将上述命令作为 docker 配置的一部分后,安装的软件包没有任何错误。来自 .kitchen.yml
:
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
提示:浏览容器文档论坛,例如 Docker Forum。
这是一个 solution for 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
禁用),以便软件包脚本设置语言环境正确地,此示例将语言环境设置为英语(英国,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 上的语言环境。你甚至不需要 /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
。所以对于 trusty(ubuntu 14.04),只需 运行
RUN apt-get -y install locales && \
update-locale LANG=en_US.UTF-8
这样至少全局默认语言环境从烦人 'POSIX' 更改为您想要的语言环境。