Docker容器不识别宋体等字体的解决⽅案
问题背景:
在使⽤docker部署项⽬的时候,由于项⽬中调⽤打印控件默认使⽤的是系统字体,在windows上部署没有问题,但是在docker容器中运⾏的时候,由于docker中没有宋体等相关字体,导致系统报错⽆法到相应的字体。
解决思路:
其实就像解决linux本⾝没有宋体的问题⼀样,也可以⽤来解决容器问题。发现其实很多docker容器的问题最后都可以仿照linux的解决思路来处理。⼤体就是下载宋体ttf、ttc⽂件,然后将其考⼊容器字体⽬录下,重启容器即可。
解决办法:
1、查看容器⽀持的字体。
fc-list :lang=zh
当看到下列情况,说明没有安装字体管理,需要安装字体
2、安装字体库。
yum -y install fontconfig
安装完成后,在/usr/share⽬录下就能看到fontconfig、fonts⽂件夹,如图:
3、将下载下来的字体ttc、ttf⽂件拷贝到容器的/usr/share/fonts⽂件中。
容器:/usr/share/fonts
f 容器:/usr/share/fonts
4、然后重启容器,就可以看到安装的中⽂字体。
5、也可以将此步骤写到Dockerfile中,在构建镜像的时候⾃动实现。
补充:Docker | Docker容器中安装中⽂字体和更改 utf-8 编码(解决中⽂乱码问题)
1. 项⽬背景
开发团队反馈,在项⽬运⾏中,使⽤ pagoffice 和使⽤ word 转 pdf 会出现乱码,针对这⼀问题,进⾏解决,做此记录,⽤以回顾。
2. 问题分析
使⽤ pagoffice 和使⽤ word 转 pdf 出现乱码有两个问题,对应关系为:
pagoffice ---- 未使⽤ UTF-8 编码,部分 docker 容器中默认为 POSIX。
word2pdf ---- Liunx 中未安装中⽂字体缺失,linux及docker容器中默有部分中⽂,或⽆中⽂字体。
综上所述,要想彻底解决容器乱码问题,则需要解决:1.使⽤ utf-8 ,⽀持中⽂; 2.安装中⽂字体。
3. 解决⽅案
3.1. 使⽤ UTF-8 编码,⽀持中⽂
3.1.1 使⽤C.UTF-8编码
使⽤C.UTF-8编码能够⽀持中⽂的,官⽹上的docker镜像是⽀持并默认是C.UTF-8编码。
locale -a
#查看容器所有语⾔环境
locale
#查看容器使⽤的语⾔环境
如果使⽤的镜像不是C.UTF-8编码,则可以更改为此编码格式,在运⾏容器时添加以下参数:
-
e export LANG="C.UTF-8"
3.1.2 其他⽅案
也可以在 docker 启动的时候,加上参数。
-e export LANG="zh_CN.UTF-8"
但是我使⽤的是docker官⽹的镜像,使⽤参数后,确实是设置使⽤了"zh_CN.UTF-8",但是没有进⾏安装。会有报错:
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=
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
3.2. 安装中⽂字体,显⽰中⽂
3.2.1 查看现有字体
查看Linux⽬前的所有字体
fc-list
查看Linux⽬前的所有中⽂字体
fonts字体怎么安装
fc-list :lang=zh
3.2.2 获取其他字体
在 windows 系统中,字体存在于 C:\Windows\Fonts 下。复制后,打上传到 Linux 服务器 /opt/software/chinese 中(我是要在docker容器中安装字体,如果要在linux主机中安装字体,则直接放在服务器的 /usr/share/fonts/ ⽂件夹下)。
3.2.2 容器安装字体
docker ps -a
#查看容器
docker cp /opt/software/chinese tomcat:/usr/share/fonts/
#tomcat为容器名称
docker exec -it tomcat /bin/bash
#进⼊容器
chmod 644 -R chinese/
授权⽂件夹
fc-list :lang=zh
#查看中⽂字体
fc-cache -fv
#刷新缓存
3.3. 验证
pagoffice ---- 改动docker 容器后,需要重启容器
word2pdf ---- 刷新字体缓存即可,不需要重启容器
以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。如有错误或未考虑完全的地⽅,望不吝赐教。