如何在Debian / Ubuntu Docker容器中设置语言环境?

时间:2015-02-09 08:55:13

标签: docker ubuntu debian

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

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

我试过了:

locale-gen nb_NO.UTF-8

但没有改变。如何在Docker容器中设置语言环境和键盘?

13 个答案:

答案 0 :(得分:118)

将您的Docker文件改编为

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

这是从该主题的非常好的帖子中提取的,来自

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

答案 1 :(得分:75)

使用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给了我很多帮助。

答案 2 :(得分:38)

添加

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

进入你的Dockerfile。基本操作不需要任何其他操作。 同时,locale-gen不接受任何参数,这就是为什么没有任何“修复”使用它的原因。

答案 3 :(得分:19)

我实际上碰巧遭遇了同样的问题,但是所提供的答案都没有100%与debian一起使用:最新,即使它们提供了很好的提示。

最大的区别是你应该确保安装 locales locales-all ,后者已经包含了en_US.UTF- 8,所以你不必使用 local-gen dpkg-reconfigure 生成它。

这是我在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

答案 4 :(得分:14)

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

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

没有必要修改Dockerfile。

答案 5 :(得分:2)

提示:浏览容器文档论坛,例如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.utf8

答案 6 :(得分:1)

@Mixel的answer非常适合我们拥有的基于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

答案 7 :(得分:0)

当我不希望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

答案 8 :(得分:0)

安装语言环境软件包后,无需重置语言环境,而是可以回答在安装软件包之前通常会被问到的问题(由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/*

答案 9 :(得分:0)

你们不需要那些复杂的事情就可以在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上使用。

答案 10 :(得分:0)

我使用了此字词(在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! ?

答案 11 :(得分:0)

在“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

享受吧!

答案 12 :(得分:-1)

对我来说, 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