我使用 Docker 安装了一个 Ubuntu Trusty 容器,当我连接到它时,我可以看到语言环境设置为最低限度:
sudo docker run -i -t <id> /bin/bash
root@<id>:/# locale
LANG=
LANGUAGE=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=
我需要使用统一码区域设置(例如美国英语en_US.UTF-8
)。
我尝试编辑 /etc/default/locale 文件并将其放入其中:
# cat /etc/default/locale
LANG=en_US.UTF-8
但即使离开容器并返回后,区域设置仍然没有正确设置。
我也尝试使用该update-locale
命令,但没有成功:
root@cab13a6abe4f:/# update-locale LANG=en_US.UTF-8
root@cab13a6abe4f:/# locale
LANG=
LANGUAGE=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=
在我的本地配置中,我有以下配置:
LANG=en_US.UTF-8
LANGUAGE=en_US
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=en_US.UTF-8
LC_TIME=en_US.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=en_US.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=en_US.UTF-8
LC_NAME=en_US.UTF-8
LC_ADDRESS=en_US.UTF-8
LC_TELEPHONE=en_US.UTF-8
LC_MEASUREMENT=en_US.UTF-8
LC_IDENTIFICATION=en_US.UTF-8
LC_ALL=
我怎样才能在我的 Docker 容器中拥有同样的东西?
提前致谢!
答案1
我在我的中使用它Dockerfile
:
# Set the locale
RUN locale-gen en_US.UTF-8
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
也可以使用ENV
单行代码:
RUN locale-gen en_US.UTF-8
ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en' LC_ALL='en_US.UTF-8'
答案2
该/etc/default/locale
文件由 PAM 加载;/etc/pam.d/login
例如,请参阅。但是,在 Docker 容器中运行命令时不会调用 PAM。要配置语言环境,只需在 Dockerfile 中设置相关环境变量即可。示例:
FROM ubuntu:trusty
ENV LANG en_US.UTF-8
CMD ["/bin/bash"]
答案3
尝试
ENV LANG C.UTF-8
如果您收到unsupported locale setting
错误并且不想安装任何新的语言环境。
答案4
这扩展解决方案解决了我在 Ubuntu docker 容器中遇到的 python 语言环境问题:
RUN apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y locales \
&& 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 LC_ALL en_US.UTF-8