如何防止在 Docker 容器中运行的 bash 中扭曲西里尔文文本?

Posted

技术标签:

【中文标题】如何防止在 Docker 容器中运行的 bash 中扭曲西里尔文文本?【英文标题】:How to prevent distorting Cyrillic text in bash running in a Docker container? 【发布时间】:2019-07-19 21:57:20 【问题描述】:

我在 Dockerfile 中设置了以下区域设置:

# Set the russian locale
RUN apt-get clean && apt-get update && apt-get install -y locales
RUN locale-gen ru_RU.UTF-8
ENV LANG ru_RU.UTF-8
ENV LANGUAGE ru_RU.UTF-8
ENV LC_ALL ru_RU.UTF-8

似乎语言环境设置不正确:

root@4fcfdd39679c:/front-office# locale 
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=ru_RU.UTF-8
LANGUAGE=ru_RU.UTF-8
LC_CTYPE="ru_RU.UTF-8"
LC_NUMERIC="ru_RU.UTF-8"
LC_TIME="ru_RU.UTF-8"
LC_COLLATE="ru_RU.UTF-8"
LC_MONETARY="ru_RU.UTF-8"
LC_MESSAGES="ru_RU.UTF-8"
LC_PAPER="ru_RU.UTF-8"
LC_NAME="ru_RU.UTF-8"
LC_ADDRESS="ru_RU.UTF-8"
LC_TELEPHONE="ru_RU.UTF-8"
LC_MEASUREMENT="ru_RU.UTF-8"
LC_IDENTIFICATION="ru_RU.UTF-8"
LC_ALL=ru_RU.UTF-8
root@4fcfdd39679c:/front-office#

但是当我在 bash 中编写文本时(像这样运行:docker-compose run --rm app bash),存在格式错误的西里尔文本 - 它以 char ":�" 开头并且不完全支持所有俄语字母。如何解决?

【问题讨论】:

注意:这个错误通常不在图像上,而是在应该显示文本的终端上。你有好的字体吗?查看计算机上的区域设置是否正确?术语呢? 我不确定。如何检查字体和术语? 你在哪里运行 docker。对我来说,问题出在您的“计算机”方面(而不是在 docker 内部)。检查您的终端是否支持 Unicode,并且 TERM environmanr 变量(也在 docker 内部)与您的终端设置兼容。 【参考方案1】:

我在 Dockerfile 中添加了以下代码并重建了图像。一切正常

RUN apt-get update && apt-get install -y locales

# Locale
RUN sed -i -e \
  's/# ru_RU.UTF-8 UTF-8/ru_RU.UTF-8 UTF-8/' /etc/locale.gen \
   && locale-gen

ENV LANG ru_RU.UTF-8
ENV LANGUAGE ru_RU:ru
ENV LC_LANG ru_RU.UTF-8
ENV LC_ALL ru_RU.UTF-8

Link to original answer on ***.ru

【讨论】:

以上是关于如何防止在 Docker 容器中运行的 bash 中扭曲西里尔文文本?的主要内容,如果未能解决你的问题,请参考以下文章

Kubernetes:如何从 Docker 容器 A 在 Docker 容器 B 上运行 Bash 命令

如何避免Docker容器启动脚本运行后自动退出

如何将WebLogic服务器运行于Docker容器中

如何在 docker 容器中运行 cron 作业

防止直接调用托管在 docker 容器中的微服务的最佳方法

如何在Docker容器中运行Nginx而不停止?