小知识:Docker容器不识别宋体等字体的解决方案

问题背景:

在使用docker部署项目的时候,由于项目中调用打印控件默认使用的是系统字体,在windows上部署没有问题,但是在docker容器中运行的时候,由于docker中没有宋体等相关字体,导致系统报错无法找到相应的字体。

解决思路:

其实就像解决linux本身没有宋体的问题一样,也可以用来解决容器问题。发现其实很多docker容器的问题最后都可以仿照linux的解决思路来处理。大体就是下载宋体ttf、ttc文件,然后将其考入容器字体目录下,重启容器即可。

解决办法:

1、查看容器支持的字体。

?
1
fc-list :lang=zh

当看到下列情况,说明没有安装字体管理,需要安装字体

%小知识:Docker容器不识别宋体等字体的解决方案-猿站网-插图

2、安装字体库。

?
1
yum -y install fontconfig

安装完成后,在/usr/share目录下就能看到fontconfig、fonts文件夹,如图:

%小知识:Docker容器不识别宋体等字体的解决方案-1猿站网-插图

3、将下载下来的字体ttc、ttf文件拷贝到容器的/usr/share/fonts文件中。

?
1
2
cp simsun.ttc 容器:/usr/share/fonts
cp simsun.ttf 容器:/usr/share/fonts

4、然后重启容器,就可以看到安装的中文字体。

%小知识:Docker容器不识别宋体等字体的解决方案-2猿站网-插图

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编码。

?
1
2
locale -a
#查看容器所有语言环境
?
1
2
locale
#查看容器使用的语言环境

如果使用的镜像不是C.UTF-8编码,则可以更改为此编码格式,在运行容器时添加以下参数:

?
1
-e export LANG=”C.UTF-8″

3.1.2 其他方案

也可以在 docker 启动的时候,加上参数。

?
1
-e export LANG=”zh_CN.UTF-8″

但是我使用的是docker官网的镜像,使用参数后,确实是设置使用了”zh_CN.UTF-8″,但是没有进行安装。会有报错:

?
1
2
locale
#查看设置的字符集
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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=
?
1
2
locale -a
#查看安装的字符集
?
1
2
3
4
5
6
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目前的所有字体

?
1
fc-list

查看Linux目前的所有中文字体

?
1
fc-list :lang=zh

3.2.2 获取其他字体

在 windows 系统中,字体存在于 C:\Windows\Fonts 下。复制后,打上传到 Linux 服务器 /opt/software/chinese 中(我是要在docker容器中安装字体,如果要在linux主机中安装字体,则直接放在服务器的 /usr/share/fonts/ 文件夹下)。

3.2.2 容器安装字体

?
1
2
docker ps -a
#查看容器
?
1
2
docker cp /opt/software/chinese tomcat:/usr/share/fonts/
#tomcat为容器名称
?
1
2
docker exec -it tomcat /bin/bash
#进入容器
?
1
2
chmod 644 -R chinese/
授权文件夹
?
1
2
fc-list :lang=zh
#查看中文字体

%小知识:Docker容器不识别宋体等字体的解决方案-3猿站网-插图

?
1
2
fc-cache -fv
#刷新缓存

%小知识:Docker容器不识别宋体等字体的解决方案-4猿站网-插图

3.3. 验证

pagoffice —- 改动docker 容器后,需要重启容器

word2pdf —- 刷新字体缓存即可,不需要重启容器

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

原文链接:https://blog.csdn.net/lin521lh/article/details/78498733

声明: 猿站网有关资源均来自网络搜集与网友提供,任何涉及商业盈利目的的均不得使用,否则产生的一切后果将由您自己承担! 本平台资源仅供个人学习交流、测试使用 所有内容请在下载后24小时内删除,制止非法恶意传播,不对任何下载或转载者造成的危害负任何法律责任!也请大家支持、购置正版! 。本站一律禁止以任何方式发布或转载任何违法的相关信息访客发现请向站长举报,会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。本网站的资源部分来源于网络,如有侵权烦请发送邮件至:2697268773@qq.com进行处理。
建站知识

小知识:Alpine Docker镜像字体的问题解决操作

2023-3-23 13:37:21

建站知识

小知识:docker win ping 不通容器 避坑指南

2023-3-23 13:52:06

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索