docker容器卡死(Docker容器不识别宋体等字体的解决方案)
docker容器卡死
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文件中。
cp simsun.ttc 容器:/usr/share/fonts cp simsun.ttf 容器:/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目前的所有中文字体
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 ---- 刷新字体缓存即可,不需要重启容器
以上为个人经验,希望能给大家一个参考,也希望大家多多支持开心学习网。如有错误或未考虑完全的地方,望不吝赐教。
- docker配置说明(Docker安装Kong API Gateway并使用的详细教程)
- docker容器无法启动(Docker 无法停止或删除容器服务问题的解决方案)
- docker容器的使用过程(详解docker容器的层的概念)
- docker 重启容器后数据丢失(如何恢复docker容器数据)
- dockerfile镜像介绍(使用Dockerfile构建docker镜像)
- docker容器根据进程号查看端口(Docker 通过端口来连接一个容器的实现)
- harbor镜像仓库扫描原理(Harbor搭建Docker私有仓库的实现方法)
- netcorelinux后台运作(Linux系统Docker 部署 ASP.NET Core应用的流程分析)
- docker下怎么搭建一个php环境(Docker搭建php环境教程详解)
- docker容器设置端口(Docker 实现容器端口绑定本地端口)
- docker运行环境centos(如何在centos的docker里安装jupyter并开放端口)
- 无法访问docker容器内的端口(docker容器中切换用户,提示权限不足的解决)
- docker 容器端口查不到(docker容器无法访问宿主机端口的解决)
- docker ip地址分配(docker添加网桥并设置ip地址范围操作)
- docker只有localhost可用(浅谈Docker如何自定义host文件)
- docker如何搭建gitlab(docker+gitlab+gitlab-runner部署详解)
- 一课译词 放鸽子(一课译词放鸽子)
- 终于来了,淘宝更改账户名测试中,快去看看你能不能修改(淘宝更改账户名测试中)
- 淘宝支持账号名修改,网友 终于可以 重新做人 了(淘宝支持账号名修改)
- 盘点那些年让人称奇的年终奖 最后一个赢辣条毫无悬念(盘点那些年让人称奇的年终奖)
- 你还没有升职吗 他竟因为几套激励理论,升职了(你还没有升职吗)
- 某知名企业绩效管理体系及薪酬分配体系操作手册(某知名企业绩效管理体系及薪酬分配体系操作手册)
热门推荐
- dedecms标签怎么用(dedecms三级栏目调用方法)
- css用什么设置透明度(详解css透明度之rgba和opacity的区别及兼容)
- sysbenchmysql性能跑分(MySQL性能压力基准测试工具sysbench的使用简介)
- ftp服务器怎么搭建linux(Linux下使用vsftp搭建FTP服务器附参数说明)
- sqlserver 查询锁(sqlserver:查询锁住sql以及解锁方法)
- 自己在做项目过程中的php知识(PHP+Oracle本地开发环境搭建方法详解)
- sqlserver2008远程连接设置(如何开启SqlServer 远程访问)
- css样式退出效果(纯css实现选中切换效果的示例)
- web前端开发怎么算乘法(如何计算Web动画帧率FPS)
- canvas绘制二进制图片(Canvas获取视频第一帧缩略图的实现)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9