Answers:
将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
这摘自该主题的非常好的帖子,从
apt-get -y install locales
在使用Ubuntu时使用
RUN touch /usr/share/locale/locale.alias
在调用之前添加locale-gen
sed
脚本有点笨拙。尝试s/# \(en_US\.UTF-8 .*\)/\1/
通过捕获它来避免在替换字符串中重复搜索短语。
ENV LANG=en_US.UTF-8 \ LANGUAGE=en_US \ LC_ALL=en_US.UTF-8
使用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
无需安装任何软件即可在所有系统上使用,并且大多数情况下就足够了。
locales
。
docker run
命令args中设置env vars :stackoverflow.com/questions/28405902/…–
apt-get install -y locales
实际上,我碰巧遇到了同样的问题,但是即使提供了很好的提示,提供的答案也没有100%使用debian:latest。
最大的区别是,您应该确保同时安装了语言环境 和 语言环境-所有语言环境,后者已经包含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中可用。
在运行命令时指定LANG
和LC_ALL
环境变量-e
:
docker run -e LANG=C.UTF-8 -e LC_ALL=C.UTF-8 -it --rm <yourimage> <yourcommand>
无需修改Dockerfile。
-e
顺便说一下,这些参数也可以与docker-compose一起使用。
C.UTF-8
区域设置。它们通常不包含特定于语言的语言环境(例如en_US.UTF-8
)。为此,您需要ot install locales-all
(大)或在end之后安装locales
并运行。locale-gen
/etc/locale.gen
提示:浏览容器文档论坛,例如Docker Forum。
这是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
你们不需要那些复杂的事情就可以在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上运行。
@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
我从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映像的用户更改它们时,我不喜欢使用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
locale
当执行后续命令,执行后续RUN
块或以当前映像为基础构建另一个映像时,输出不会更改。可能需要采取一些其他措施才能真正应用这些更改?
ENV
一样ENV LC_ALL=en_US.UTF-8
。
您可以回答noninteractive
在安装软件包之前通常会被问到的问题(由禁用),而不是在安装locales软件包后重置语言环境,以便软件包脚本正确设置语言环境,此示例将语言环境设置为英语(英国,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图片中起作用的是:
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! 👌
正确打印。