我正在运行一个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
这是从该主题的非常好的帖子中提取出来的
那些使用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
不接受任何争论,这就是为什么没有任何“修复”使用它的原因。
我实际上碰巧遇到了同样的问题,但是没有提供的答案是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
运行命令时使用LANG
指定LC_ALL
和-e
环境变量:
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.utf8
@ Mixel的answer非常适合我们拥有的基于Ubuntu的docker镜像。
但是,我们还有一个基于centos的docker图像,用于通过厨师测试食谱(使用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
在安装locales包之后,您可以回答在安装软件包之前通常会被问到的问题(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/*
当我不希望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