linux服务器docker容器中安装字体

如果java程序涉及到从远程服务器中生产表格供下载(例如使用easyexcel生成表格),远程服务器中没有安装字体,会报错,报错内容如下:

com.alibaba.excel.exception.ExcelGenerateException: java.lang.UnsatisfiedLinkError: /usr/local/java/jdk-14.0.2/lib/libfontmanager.so: libfreetype.so.6: cannot open shared object file: No such file or directory

原因是比较高版本的JDK部署到服务器上后不包含字体文件,需要我们手工安装。有人采用降低JDK版本的办法,但这样治标不治本,牵扯的地方太多,也很复杂,操作不好容易出各种bug,十分得不推荐。

我推荐的办法:

我根据自己查阅资料整理了在docker容器中安装字体文件的方法步骤。虽然这种方法每次安装docker时会多花几分钟,但跟着步骤操作还是很容易的。

1、 在Dockerfile中添加配置行ENV LANG zh_CN.UTF-8,用于设置中文变量环境。

2、 把本地电脑中的字体(widows系统通过控制面板 -> 外观和个性化 -> 字体找到本地电脑中的所有字体),例如宋体的字体文件simsun.ttc上传到远程服务器某个文件夹中,比如 /root/fonts,文件夹可手动创建。

3、 部署好docker容器后,进入对应的容器,例如mall,命令为 docker exec -it mall bash

4、 执行命令 echo $LANG,查看docker容器的系统语言环境,应该显示为上面配置的zh_CN.UTF-8

5、 执行命令 fc-list :lang=zh,查看docker容器可使用的中文字体。如果提示命令不存在(bash: fc-list: command not found),说明当前容器没有安装字体软件,需执行命令 yum -y install fontconfig 进行安装。

6、 成功安装字体软件后,docker容器的 /usr/share 文件夹中会新创建两个文件夹 fontsfontconfig

7、 执行命令 exit 退出docker容器。接着执行命令 docker inspect -f ‘{{.ID}}’ 12345abc 获取对应容器的长ID(12345abc为docker容器的短ID,可通过命令 docker ps -a 获取到所有docker容器的运行情况及信息,包括容器的短ID),执行结果为(此处为举个栗子):12345abcdefg12345abcdefg

8、 把上面上传到服务器中的字体文件复制到docker容器中的文件夹中 /usr/share/fonts,命令为
docker cp /root/fonts/simsun.ttc 12345abcdefg12345abcdefg:/usr/share/fonts

9、执行命令 docker exec -it mall bash 进入docker容器。接着执行命令 fc-cache -vf,刷新容器的字体缓存。最后执行命令 fc-list :lang=zh ,查看容器可使用的中文字体,会显示如下信息:
/usr/share/fonts/simsun.ttc: 宋体,SimSun:style=常规,Regular
/usr/share/fonts/simsun.ttc: 新宋体,NSimSun:style=常规,Regular

10、 执行命令 exit 退出docker容器。接着执行命令 docker restart mall 重启容器,就可以正常使用字体了。我测试时发现,不需要这一步的重启容器,字体也会生效,大家可以根据自己的情况试一下。

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值