我正在运行一个Ubuntu Docker容器。我使用挪威键盘需要使用挪威字符(øæå)。
我的终端字符编码设置为UTF-8,我通过SSH连接到我的容器。然而,我无法输入挪威字符,也无法复制和粘贴挪威字符,也无法使用CTL + SHIFT + U + 00f8。
我尝试过:
locale-gen nb_NO.UTF-8
但是什么也没有改变。我该如何在 Docker 容器内设置语言环境和键盘布局?
# 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
apt-get -y install locales
https://web.archive.org/web/20230323021946/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
将以下内容添加到您的Dockerfile中。(您可能需要确保已安装locales
包。)对于基本操作,不需要其他内容。
与此同时,在Ubuntu之外,locale-gen
不接受任何参数,这就是为什么在Debian等系统上使用它的任何“修复”都不起作用的原因。Ubuntu已经修补了locale-gen
以接受要生成的语言环境列表,但该补丁目前尚未被Debian或其他任何地方接受。
C.UTF-8
在所有系统上都可用,无需安装任何东西,而且它应该大部分够用。 - andrewshlocales
。 - wisbuckydocker run
命令参数中设置环境变量:https://dev59.com/p14c5IYBdhLWcg3wCGVJ#52004330 - wisbuckyapt-get install -y locales
。 - gerardnicoENV LC_ALL=C.UTF-8 LANG=C.UTF-8
。 - Константин Ван我刚好也遇到了同样的问题,但是所提供的答案都不是针对debian:latest完全有效,即使它们提供了很好的提示。
最大的区别在于,您应该确保安装了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
apt-cache show locales-all
的输出是什么?它绝对还是一个官方包,在 Debian 中也是可用的。 - Jean使用-e
在运行命令时指定LANG
和LC_ALL
环境变量:
docker run -e LANG=C.UTF-8 -e LC_ALL=C.UTF-8 -it --rm <yourimage> <yourcommand>
不需要修改Dockerfile文件。
-e
参数也适用于 docker-compose。 - Dag HøidahlC.UTF-8
语言环境,但通常不会包括特定语言的语言环境(例如en_US.UTF-8
)。如果需要这些语言环境,则需要安装locales-all
(比较大),或者安装locales
并在编辑完/etc/locale.gen
文件后运行locale-gen
命令。 - Jonathon Reinhartlocale-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
中的某个位置即可。如果您没有生成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
locale
输出没有改变,也没有在执行后续RUN
块或使用当前镜像作为基础构建另一个镜像时改变。也许需要采取其他措施来实际应用这些更改? - user7860670ENV
,例如 ENV LC_ALL=en_US.UTF-8
。 - Mitar我在执行 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 表现良好!
。
LANG
或 LC_ALL
就足以使 Python 输出 UTF-8。我意识到这三个都列在 locale
命令中,但实际上可能并不需要。我不确定。我还没有深入研究过 locale。 - erwin# 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
享受它!
locales
软件包)。 - Edenshaw
apt-get -y install locales
命令安装语言环境。 - user2915097locale-gen
前添加RUN touch /usr/share/locale/locale.alias
。 - Paul Keistersed
脚本有些笨重。尝试使用s/# \(en_US\.UTF-8 .*\)/\1/
,通过捕获搜索短语来避免在替换字符串中重复使用它。 - tripleeeENV LANG=en_US.UTF-8 \ LANGUAGE=en_US \ LC_ALL=en_US.UTF-8
。 - Andre RavazziENV
不会创建额外的层级。因此,您可以放心使用多个ENV
命令而不会出现问题。 - borievka