解决docker 容器设置中文语言包出现的问题

如果在Docker 中采用 docker search centos

采用 docker pull docker.io/centos 下载基础镜像

这个镜像是不支持中文的,可以采用docker attach 容器ID进入容器后采用"locale"查看

可以采用“locale -a” 查看系统语言包,会发现没有中文包

解决方案:

1、yum install kde-l10n-Chinese -y 安装语言包(针对centos 7)

2、yum reinstall glibc-common -y 更新gitbc 包(因为该镜像已阉割了该包的部分功能,所以需要更新)

3、localedef -c -f UTF-8 -i zh_CN zh_CN.utf8 (设置系统语言包)

4、ENV LC_ALL zh_CN.UTF-8 通过设置环境变量的方式设置(可以采用直接修改/etc/locale.conf 文件来实现,不过需要reboot)

5、如果采用Dockerfile 的方式,那么可以参考下面

# 版本信息
FROM docker.io/centos:latest
MAINTAINER mapengfei "pengfeima@powerbridge.com"
#设置系统编码
RUN yum install kde-l10n-Chinese -y
RUN yum install glibc-common -y
RUN localedef -c -f UTF-8 -i zh_CN zh_CN.utf8
#RUN export LANG=zh_CN.UTF-8
#RUN echo "export LANG=zh_CN.UTF-8" >> /etc/locale.conf
#ENV LANG zh_CN.UTF-8
ENV LC_ALL zh_CN.UTF-8

补充:修改Docker容器字符编码为-zh_CN.UTF-8中文字符集

版本记录

2019.4.26日 第一版

问题描述

公司的java项目中使用了openoffice和pdf2html对文件进行格式转换,word,ppt,pdf文件都转换没有问题,唯独excel转换后显示乱码

背景介绍

项目在Docker容器中运行,Docker版本:Docker version 18.06.1-ce, build e68fc7a

容器系统的内核版本:3.10.0-514.el7.x86_64

容器系统的发型版本:Cent0S7

故障原因

和架构沟通过后知道了word,pdf,ppt文件是通过openoffice和pdf2html配合转换的,但excel文件却没有这样处理,而是用了网上开源的java代码实现的,架构看了代码后发现在转换excel文件的时候这段代码读取了宿主系统的语言配置,所以确定了问题的原因就是系统字符编码设置。

解决方法

查看系统字符编码没问题(注意前三行),看来字符集设置正确。排查一下前三行的问题,网上说是没有安装中文字符集导致的

[root@4273aa460888 opt]# 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=zh_CN.UTF-8
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_PAPER="zh_CN.UTF-8"
LC_NAME="zh_CN.UTF-8"
LC_ADDRESS="zh_CN.UTF-8"
LC_TELEPHONE="zh_CN.UTF-8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"
LC_ALL= 

我们看一本机都安装了哪些字符集,我擦,果然没有安装中文字符集.....(没有安装就算你设置了也没用)

[root@4273aa460888 opt]# locale -a
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_COLLATE to default locale: No such file or directory
C
POSIX
en_US.utf8

再看一下/etc/locale.conf的内容,干,还是英文字符集......

[root@4273aa460888 opt]# cat /etc/locale.conf
LANG="en_US.UTF-8"

好,我们接下来安装一下中文字符集

删除yum.conf文件中的语言配置

sed -i '13'd /etc/yum.conf

安装字体和glibc

yum install -y kde-l10n-Chinese glibc-common

我们再看一下,终于有了

[root@35b0e9b16498 opt]# locale -a|grep zh
zh_CN
zh_CN.gb18030
zh_CN.gb2312
zh_CN.gbk
zh_CN.utf8
zh_HK
zh_HK.big5hkscs
zh_HK.utf8
zh_SG
zh_SG.gb2312
zh_SG.gbk
zh_SG.utf8
zh_TW
zh_TW.big5
zh_TW.euctw
zh_TW.utf8

我们再修改一下/etc/locale.conf文件

echo -e 'export LANG="zh_CN.UTF-8"\nexport LC_ALL="zh_CN.UTF-8"' > /etc/locale.conf
source /etc/locale.conf

我们再看一下字符编码,好了,没有报错,且一切正常。

[root@35b0e9b16498 opt]# locale
LANG=zh_CN.UTF-8
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_PAPER="zh_CN.UTF-8"
LC_NAME="zh_CN.UTF-8"
LC_ADDRESS="zh_CN.UTF-8"
LC_TELEPHONE="zh_CN.UTF-8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"
LC_ALL=zh_CN.UTF-8

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • Docker容器 日志中文乱码问题解决办法

    Docker容器 日志中文乱码问题解决办法 1. 找到dockerfile文件, 如 /use/local/src/Docker/Dockerfile 2. 编辑Dockerfile 添加 ENV LANG en_US.UTF-8 ENV LANGUAGE en_US:en ENV LC_ALL en_US.UTF-8 3. 生成新的镜像文件 docker build -t centos7 . 4. 使用docker images查看新生成的镜像 5. 使用新的镜像启动容器 docker run

  • docker容器下配置jupyter notebook的操作

    docker容器下配置jupyter notebook,主要是为了编写python代码,更具体点是做深度学习的开发. jupyter web形式最高效的使用方式就是部署在云上,不管是cpu云服务器还是gpu的云服务器,都能快速启动使用. 而docker的出现又方便了很多在部署使用上. - 安装 docker docker分为docker CE和docker EE,一般使用docker CE(社区版本). docker可以在Linux(ubuntu.centos).MacOS.Windows或者树

  • Docker容器中文乱码(修改docker容器编码格式)的解决方案

    前台上传文件到服务器后,服务器返回给前台的文件列表中出现中文乱码,所有的中文文件名全部变成?,英文文件名则正常显示. 问题经过定位,发现后台代码的multipartfile类在执行transterto的方法时就发生了此异常,然而配置文件集中的multipartResolver以及encodingFilter均已经设置成了UTF-8,排除代码异常.kubectl exec进入到docker容器中进行查看时发现,文件在容器中也是中文文件名显示异常.查看docker容器编码格式:执行locale命令:

  • Docker 实现容器端口绑定本地端口

    今天遇到启动镜像之后,通过HTTP请求的的方式访问不了的一个小问题,下面来记录并分享下解决办法: 常用的docker启动命令和解决办法如下所示: 一.启动docker 众所周知,启动容器的命令如下: docker run 镜像名称 二.绑定容器端口与本地端口 由于启动容器之后,本地无法直接访问容器内的端口,故而需要将本地的端口与容器的端口做一个绑定操作,从而可以通过本地端口去访问容器,设置如下: docker run -p 本地端口:容器端口 镜像名称 然后就可以通过本地的浏览器通过本地的端口访

  • Docker容器不识别宋体等字体的解决方案

    问题背景: 在使用docker部署项目的时候,由于项目中调用打印控件默认使用的是系统字体,在windows上部署没有问题,但是在docker容器中运行的时候,由于docker中没有宋体等相关字体,导致系统报错无法找到相应的字体. 解决思路: 其实就像解决linux本身没有宋体的问题一样,也可以用来解决容器问题.发现其实很多docker容器的问题最后都可以仿照linux的解决思路来处理.大体就是下载宋体ttf.ttc文件,然后将其考入容器字体目录下,重启容器即可. 解决办法: 1.查看容器支持的字

  • docker win ping 不通容器 避坑指南

    使用win docker-desktop,想连接容器开发,尝试了各种网络上的路子.kill my much time! 桥接是不行的, 手动添加路由也是行不通的, 所以看到这个的你不要想用常规的方法使用win宿主机连接你的linux容器,截止2020.3.29 查看原因 Networking features in Docker Desktop for Windows 也就是说 目前不支持win与linux容器使用桥接通信. 不过端口映射还是可以的,就是添加端口多的话 有点麻烦. 致我逝去的好几

  • 解决docker 容器设置中文语言包出现的问题

    如果在Docker 中采用 docker search centos 采用 docker pull docker.io/centos 下载基础镜像 这个镜像是不支持中文的,可以采用docker attach 容器ID进入容器后采用"locale"查看 可以采用"locale -a" 查看系统语言包,会发现没有中文包 解决方案: 1.yum install kde-l10n-Chinese -y 安装语言包(针对centos 7) 2.yum reinstall gl

  • 使用PyCharm官方中文语言包汉化PyCharm

    对于英文不行我来说使用英文版PyCharm实在是太难受了,网上好多汉化补丁都是网友提供了,下面为大家介绍一种PyCharm官方中文语言包汉化方法 在PyCharm主窗口中点击菜单栏中的File菜单下的Settings...菜单进入PyCharm设置窗口,如下图 PyCharm主窗口 PyCharm设置窗口,如下图.点击下图标注1 Plugins选项进入PyCharm插件管理窗口,在下图标注2处输入"chinese"系统会自动搜索相关插件,找到如下图标注3处所示的chinese(simp

  • 解决docker容器无法ping外网的问题

    今天在docker搭建redis环境的时候,发现yum拉取不到资源,上不到网,报了如下错误: http://mirrors.aliyun.com/centos/6.10/extras/x86_64/Packages/epel-release-6-8.noarch.rpm: [Errno 14] PYCURL ERROR 6 - "Couldn't resolve host 'mirrors.aliyun.com'" Trying other mirror. http://mirrors

  • 解决Docker容器没有vim命令的方法

    发现问题 今天在尝试修改Docker容器内文件时, 发现容器内并没有vim命令, 返回了: vim my.cnf bash: vim: command not found 本篇文章就来记录下如何解决此问题. 解决方案 仍然在docker容器内部, 首先运行以下命令, 并耐心等待一会儿: apt-get update 完成后运行: apt-get install vim 等待安装完成后, 运行以下命令, 验证是否安装成功: vim 如果返回了类似以下界面则证明vim安装成功: VIM安装成功返回

  • 解决docker容器启动后马上退出的问题

    最近在看docker如何让容器在启动时直接运行某些进程,后来发现Dockerfile可以在容器启动的时候指定容器运行命令. CMD指定,但是每个Dockerfile只能有一条CMD指令,如果指定了多条CMD指定,只有最后一条会被执行. 于是就想了一个办法,在写了一个脚本,在脚本里面启动多个进程,在Dockerfile里运行这个脚本. 最后证明这个方法是可行的,在实验过程中遇到一个问题,容器启动后会马上停止. 经查阅资料: Docker容器同时只能管理一个进程,如果这个进程退出那么容器也就退出了,

  • 如何解决docker容器启动失败

    问题:电脑重启之后,docker里面的mysql容器重启不了,不知道是什么原因 上面的步骤:如果sudo docker start name 能重新启动,也就是输入:docker ps 能看到自己所需要的服务已经开启,那就不需要再进行下面的步骤了,如果刚好像上面那样,那就接着看下文: 解决办法:删除启动不了的容器,然后再重新运行镜像. 注意此时的容器名已经变为mysql了,为关闭状态,再运行镜像时还是运行不了,但此时再启动镜像时就可以启动了 内容补充 1.查看docker占用的挂载点 cat /

  • windows宿主机和docker容器设置挂载共享文件夹的步骤

    docker容器内的程序经常需要访问.调用宿主机目录中的数据,每次都要导入导出非常麻烦费力. 接下来,一步步实现将宿主机的指定文件夹挂载到docker容器中. 1. 打开Oracle VM VitualBox: 2. 点击[设置]->点击左侧的[共享文件夹] 3. 双击默认的[c/Users \\?\c:\Users],进行编辑,这里设置D盘下的data为挂载共享目录,名称可修改,此处设为"data". 点击确定 4. 重启virtualbox虚拟机,中间有等待时间: 5. 创建

  • 2021年Sublime Text3最新激活注册码+中文语言包安装分享适用最新版(亲测可用)

    最近Sublime Text3的注册码又失效了,估计是Sublime Text官方又封了一波注册码网上找了很多都没可用的Sublime Text3注册码. 如果条件允许的话还是买一套吧,不用经常找注册码了.本人穷学生一枚没办法只能自己捣鼓了,借鉴一些其它软件的破解方法,成功注册Sublime Text3最新版,具体方案关注下面的公众号 为大家提供一种简单有效的Sublime Text3可用注册码支持最新的Sublime Text 3.2.2 3211 最新Sublime Text3注册码 下面是

  • 详解如何解决docker容器无法通过IP访问宿主机问题

    问题起源 在使用 docker 的过程中我不幸需要在 docker 容器中访问宿主机的 80 端口, 而这个 80 端口是另外一个容器 8080 端口映射出去的. 当我在容器里通过 docker 的网桥 172.17.0.1 访问宿主机时, 居然发现: curl: (7) Failed to connect to 172.17.0.1 port 80: No route to host 查找问题原因 可以确定的是容器与宿主机是有网络连接的, 因为可以在容器内部通过 172.17.0.1 Ping

随机推荐