问题描述
我正在运行一个Ubuntu Docker容器。我有挪威语键盘,需要使用挪威语字符(øÌü)。
我的终端字符编码设置为UTF-8,我使用SSH连接到了我的容器。但是,我无法键入挪威字符,也无法复制和粘贴挪威字符,也无法使用CTL + SHIFT + U + 00f8。
我试过了:
locale-gen nb_NO.UTF-8
但没有改变。如何在Docker容器中设置语言环境和键盘?
最佳办法
将您的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
这是摘自该主题的优秀文章,
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
这个answer对我有很大帮助。
第三种办法
只需添加
ENV LANG C.UTF-8
ENV LC_ALL C.UTF-8
到您的Dockerfile中。基本操作不需要任何其他操作。同时,locale-gen
不接受任何参数,这就是为什么使用FIX的FIX都不起作用的原因。
第四种办法
实际上,我碰巧遇到了同样的问题,但是即使提供了很好的提示,提供的答案也没有100%使用debian:latest。
最大的区别是您应该确保同时安装了语言环境和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
第五种办法
在运行命令时,使用-e
指定LANG
和LC_ALL
环境变量:
docker run -e LANG=C.UTF-8 -e LC_ALL=C.UTF-8 -it --rm <yourimage> <yourcommand>
无需修改Dockerfile。
第六种办法
提示:浏览容器文档论坛,例如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
第七种办法
你们不需要这些复杂的事情就可以在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上运行。