原因:docker容器中设置编码是 POSIX 不支持中文 需要设置为 en_US.UTF-8 就可以支持中文了。

解决:

1.临时:进入docker容器 在 /etc/profile 末尾添加 expor tLANG="en_US.UTF-8"  保存后执行 source /etc/profile 生效

2.永久:dockerfile中添加 ENV LANG en_US.UTF-8

过程详解:

最近在用docker建立镜像的时候发现一个问题,事情是这样的,我基于debian镜像安装了一系列的工具包括python3, 然后生成容器并在容器中执行python脚本时出现了错误。错误信息如下

SyntaxError: Non-ASCII character '\xe8' in file main.py on line 7, but no encoding declared;
see http://python.org/dev/peps/pep-0263/ for details

如果你有兴趣复现下面的结果,可以用docker 运行一个debian镜像,结果是一样的

docker run -it --rm debian bash

第7行正好有中文,也就是说程序无法处理中文。我的第一感觉就是系统的编码存在问题。
首先查看系统使用的编码方式。

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=

使用的是POSIX字符集,POSIX字符集是不支持中文的,因此程序出现错误。
再看一下系统自带了哪些字符集。

locale -a

结果如下

C
C.UTF-8
POSIX

实际上linux字符集中支持中文且用的最多的应该是zh_CN.utf8字符集,不过幸运的是,C.UTF-8也是支持中文的,不然我们就必须手动安装其他支持中文的字符集了。
将系统字符集改为C.UTF-8, 只要把系统中的环境 LANG 改为"C.UTF-8"格式就可以了,这里采用最简单的方法,修改/etc/profile 文件, 并将export LANG="C.UTF-8"加到最后一行。

apt-get update && apt install vim
vim /etc/profile
# 然后将export LANG="C.UTF-8"加到最后一行
# 然后重新加载
source /etc/profile

再来看一下系统所用的字符集

localeLANG=C.UTF-8
LANGUAGE=
LC_CTYPE="C.UTF-8"
LC_NUMERIC="C.UTF-8"
LC_TIME="C.UTF-8"
LC_COLLATE="C.UTF-8"
LC_MONETARY="C.UTF-8"
LC_MESSAGES="C.UTF-8"
LC_PAPER="C.UTF-8"
LC_NAME="C.UTF-8"
LC_ADDRESS="C.UTF-8"
LC_TELEPHONE="C.UTF-8"
LC_MEASUREMENT="C.UTF-8"
LC_IDENTIFICATION="C.UTF-8"
LC_ALL=

这就说明了修改成功,可以在debian中使用中文了。

问题在于平时基于debian构建镜像时总不可能这么改得,必须在Dockerfile中指定字符集。实际上也很简单,在Dockerfile中加上一行

FROM debian
# 加上下面这一行
ENV LANG C.UTF-8

这样生成出来的镜像就可以使用中文了。

docker 容器无法使用中文 解决方案相关推荐

  1. Mac系统下docker容器无法使用--net host共享宿主机端口的解决方案

    文章目录 背景 解决过程一 分析 Mac系统下docker容器无法使用--net host共享宿主机端口的原因 docker的网络配置 host模式 overlay模式 macvlan模式 bridg ...

  2. Docker容器内中文乱码

    Docker容器内中文乱码 一.通过Dockerfile解决中文乱码问题 方式二: 二.临时解决 方式二: 三.修改jre/lib/fonts下的字体 CSDN:黑猫_:Dockerfile 创建容器 ...

  3. Docker容器支持中文并添加中文字体

    Docker容器支持中文并添加中文字体 1.使用Maven打包Java应用,生成App.jar,上传到Linux服务器.Linux同级目录创建fonts文件夹,存放字体库以及字体 2.编写Docker ...

  4. DOCKER容器内中文显示乱码

    在docker容器内使用Bash通过 ls 列取中文列表内容时,中文会显示为乱码,简单一步就可以解决此烦恼. 在创建容器时加入环境变量: LANG=C.UTF-8 命令行方式: docker run ...

  5. docker容器迁移的解决方案

    本文使用Xshell工具,以mysql为例 一:容器的导入和导出 1:docker export 正在运行的容器id|容器名 > 文件名 (导出容器的内容作为一个归档文件) 这样一个归档的文件就 ...

  6. linux docker启动指定字符集,【字符集】解决docker 容器中中文乱码问题

    一个后端服务容器中解压zip包,释放出带文件名带中文的文件,中文显示被?代替,初步推断是服务基础镜像系统字符集出现问题. 进入容器中端界面,手动创建带中文的文件,果不其然,中文显示被?代替了! 进入容 ...

  7. 【字符集】解决docker 容器中中文乱码问题

    一个后端服务容器中解压zip包,释放出带文件名带中文的文件,中文显示被?代替,初步推断是服务基础镜像系统字符集出现问题. 进入容器中端界面,手动创建带中文的文件,果不其然,中文显示被?代替了! 进入容 ...

  8. 快速理解Docker - 容器级虚拟化解决方案

    作者:刘旭晖 Raymond 转载请注明出处 Email:colorant at 163.com BLOG:http://blog.csdn.net/colorant/ 是什么 简单的说Docker是 ...

  9. 转载: 快速理解Docker - 容器级虚拟化解决方案

    转载自: http://blog.csdn.net/colorant/article/details/20608157 是什么 简单的说Docker是一个构建在LXC之上的,基于进程容器(Proces ...

最新文章

  1. 大一c语言大作业课题大全,昆明理工大学大一C语言大作业题目.doc
  2. PL/SQL中的数据类型隐式转换规则
  3. 为什么要使用路由重分发?
  4. 新款 Azure .NET SDK 如何设定 Content-Type
  5. 【HDU - 3790】最短路径问题(DIjkstra算法 双权值)
  6. Oracle利用序列实现自动增长列
  7. 五年一贯制专转本计算机网络真题,金陵科技学院2017年五年一贯制专转本考试大纲(计算机网络基础)...
  8. mysql当时读_Mysql事务以及四中隔离级别实例2以及InnoDB如何解决当时读的幻读问题...
  9. linux的QQ邮件告警,QQ邮箱告警注意点
  10. 粤嵌GE6818实现识别触摸坐标的识别
  11. 任务管理器使用不了-灰色
  12. 80后营销人如何为理想插上丰满“羽翼”?
  13. UI自动化---Wechat批量表情包轰炸
  14. [转]让搜索跨越语言的鸿沟—谈跨语言信息检索技术
  15. SSL简介及其压力测试THC-SSL-DOS工具介绍
  16. 有道云笔记怎么保存html,有道云笔记怎么保存网页?有道云笔记保存网页技巧...
  17. .NET EF(Entity Framework)详解
  18. 无网络rpm包安装相关依赖包
  19. 鸿蒙第3批升级名单,鸿蒙系统首批升级名单详细介绍
  20. pytorch进行图像识别_pytorch使用4种不同的模型进行面部表情识别

热门文章

  1. ETSI GS MEC 016,Device application interface
  2. 5G UE — SIM Card
  3. NanoPi NEO Air使用十四:FrameBuffer的理解和使用
  4. NR 1G - 5G基站介绍
  5. SpringBoot中logback日志保存到mongoDB
  6. 2014年七月写过的代码,现在看来,还有待改进呀
  7. JAVA I/O使用方法(转)
  8. Python基础 - 第九天 - paramiko模块、进程、线程
  9. 《趣学Python编程》——2.3 使用变量
  10. spider RPC更新至2.0.0-RELEASE