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

mtm*_*ald 94 ubuntu debian docker

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

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

我试过了:

locale-gen nb_NO.UTF-8
Run Code Online (Sandbox Code Playgroud)

但没有改变.如何在Docker容器中设置区域设置和键盘?

use*_*097 139

在你的Dockerfile中添加改编自的东西

# 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     
Run Code Online (Sandbox Code Playgroud)

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

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

  • 使用Ubuntu时需要`apt-get -y install locales` (13认同)
  • 如果你想避免创建额外的层,你可以写`ENV LANG=en_US.UTF-8 \ LANGUAGE=en_US \ LC_ALL=en_US.UTF-8` (7认同)
  • 根据 https://docs.docker.com/develop/develop-images/dockerfile_best-practices/ 中的文档,“ENV”不会创建额外的层。因此,您可以毫无问题地使用多个“ENV”命令。 (6认同)
  • `sed`脚本有点笨拙.尝试使用`s /#\(en_US\.UTF-8.*\)/\1 /`以避免通过捕获它来重复替换字符串中的搜索短语. (5认同)
  • 我不得不在调用 `locale-gen` 之前添加 `RUN touch /usr/share/locale/locale.alias` 以避免致命文件未找到错误 (4认同)
  • `locale-gen --no-purge en_US.UTF-8` 对我有用,而不是 locale.gen 文件 (2认同)

mix*_*xel 85

使用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 
Run Code Online (Sandbox Code Playgroud)

这个答案对我帮助很大.


and*_*wsh 50

只需添加

ENV LANG C.UTF-8
ENV LC_ALL C.UTF-8
Run Code Online (Sandbox Code Playgroud)

进入你的Dockerfile.基本操作不需要任何其他操作.同时,locale-gen不接受任何争论,这就是为什么使用它的"修复"都不起作用的原因.

  • 您能提供任何细节吗?`C.UTF-8`可以在所有系统上使用,而无需安装任何东西,并且它“基本上”应该足够。 (4认同)
  • 在 Ubuntu 镜像上对我来说不起作用。这个[答案](/sf/answers/2698744961/)虽然有效。 (2认同)
  • 适用于 Docker ubuntu:18.04 映像。我只需要“LANG”。我也不需要安装“locales”。 (2认同)

Jea*_*ean 21

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

最大的区别是你应该确保安装了locales locales-all,后者已经包含了en_US.UTF-8,所以你不必使用local-gendpkg-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
Run Code Online (Sandbox Code Playgroud)

  • locales-all软件包的说明包括:该软件包包含所有受支持语言环境的预编译语言环境数据。更好的替代方法是安装语言环境软件包,并仅选择所需的语言环境,但由于某些语言环境文件需要占用大量内存来进行编译,因此它在低内存计算机上很有用。 (2认同)

Dag*_*ahl 16

运行命令时指定这些环境变量:

docker run -e LANG=C.UTF-8 -e LC_ALL=C.UTF-8 -it --rm <yourimage> <yourcommand>
Run Code Online (Sandbox Code Playgroud)

没有必要修改Dockerfile.

  • 之所以可行,是因为大多数发行版都包含`C.UTF-8`语言环境。它们通常不包含特定于语言的语言环境(例如,“ en_US.UTF-8”)。为此,您需要安装`locales-all`(big)或安装`locales`并在结束`/ etc / locale.gen`之后运行`locale-gen`。 (4认同)
  • 顺便说一下,`-e`参数也可以与docker-compose一起使用。 (2认同)

Mit*_*tar 6

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

只需将其放在 one 中的某个位置即可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
Run Code Online (Sandbox Code Playgroud)


Edu*_*ana 6

提示:浏览容器文档论坛,例如Docker 论坛

这是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
Run Code Online (Sandbox Code Playgroud)


Bum*_*Kim 5

你们不需要那些复杂的东西来在 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
Run Code Online (Sandbox Code Playgroud)

我发现这是最简单和最有效的。我确认它适用于 Ubuntu 16.04。