docker 容器无法使用中文 解决方案
原因: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 容器无法使用中文 解决方案相关推荐
- Mac系统下docker容器无法使用--net host共享宿主机端口的解决方案
文章目录 背景 解决过程一 分析 Mac系统下docker容器无法使用--net host共享宿主机端口的原因 docker的网络配置 host模式 overlay模式 macvlan模式 bridg ...
- Docker容器内中文乱码
Docker容器内中文乱码 一.通过Dockerfile解决中文乱码问题 方式二: 二.临时解决 方式二: 三.修改jre/lib/fonts下的字体 CSDN:黑猫_:Dockerfile 创建容器 ...
- Docker容器支持中文并添加中文字体
Docker容器支持中文并添加中文字体 1.使用Maven打包Java应用,生成App.jar,上传到Linux服务器.Linux同级目录创建fonts文件夹,存放字体库以及字体 2.编写Docker ...
- DOCKER容器内中文显示乱码
在docker容器内使用Bash通过 ls 列取中文列表内容时,中文会显示为乱码,简单一步就可以解决此烦恼. 在创建容器时加入环境变量: LANG=C.UTF-8 命令行方式: docker run ...
- docker容器迁移的解决方案
本文使用Xshell工具,以mysql为例 一:容器的导入和导出 1:docker export 正在运行的容器id|容器名 > 文件名 (导出容器的内容作为一个归档文件) 这样一个归档的文件就 ...
- linux docker启动指定字符集,【字符集】解决docker 容器中中文乱码问题
一个后端服务容器中解压zip包,释放出带文件名带中文的文件,中文显示被?代替,初步推断是服务基础镜像系统字符集出现问题. 进入容器中端界面,手动创建带中文的文件,果不其然,中文显示被?代替了! 进入容 ...
- 【字符集】解决docker 容器中中文乱码问题
一个后端服务容器中解压zip包,释放出带文件名带中文的文件,中文显示被?代替,初步推断是服务基础镜像系统字符集出现问题. 进入容器中端界面,手动创建带中文的文件,果不其然,中文显示被?代替了! 进入容 ...
- 快速理解Docker - 容器级虚拟化解决方案
作者:刘旭晖 Raymond 转载请注明出处 Email:colorant at 163.com BLOG:http://blog.csdn.net/colorant/ 是什么 简单的说Docker是 ...
- 转载: 快速理解Docker - 容器级虚拟化解决方案
转载自: http://blog.csdn.net/colorant/article/details/20608157 是什么 简单的说Docker是一个构建在LXC之上的,基于进程容器(Proces ...
最新文章
- 大一c语言大作业课题大全,昆明理工大学大一C语言大作业题目.doc
- PL/SQL中的数据类型隐式转换规则
- 为什么要使用路由重分发?
- 新款 Azure .NET SDK 如何设定 Content-Type
- 【HDU - 3790】最短路径问题(DIjkstra算法 双权值)
- Oracle利用序列实现自动增长列
- 五年一贯制专转本计算机网络真题,金陵科技学院2017年五年一贯制专转本考试大纲(计算机网络基础)...
- mysql当时读_Mysql事务以及四中隔离级别实例2以及InnoDB如何解决当时读的幻读问题...
- linux的QQ邮件告警,QQ邮箱告警注意点
- 粤嵌GE6818实现识别触摸坐标的识别
- 任务管理器使用不了-灰色
- 80后营销人如何为理想插上丰满“羽翼”?
- UI自动化---Wechat批量表情包轰炸
- [转]让搜索跨越语言的鸿沟—谈跨语言信息检索技术
- SSL简介及其压力测试THC-SSL-DOS工具介绍
- 有道云笔记怎么保存html,有道云笔记怎么保存网页?有道云笔记保存网页技巧...
- .NET EF(Entity Framework)详解
- 无网络rpm包安装相关依赖包
- 鸿蒙第3批升级名单,鸿蒙系统首批升级名单详细介绍
- pytorch进行图像识别_pytorch使用4种不同的模型进行面部表情识别