Docker安装中文字体

1,392 阅读1分钟

在项目中需要使用 html2image 生成图片。

发现在开发环境(windows系统)下,转换图片后中文显示正常,但是在测试环境(Linux系统)下中文乱码,需要安装中文字体,为了方便构建服务镜像,索性直接将字体安装在基础镜像中。

编写Dockerfile

simsun.ttf 和 simsun.ttc 是宋体,可以再windows系统(C:\Windows\Fonts)文件夹下找到。

FROM centos:7
# install simsun
COPY simsun.ttf /usr/share/fonts/my-fonts/simsun.ttf
COPY simsun.ttc /usr/share/fonts/my-fonts/simsun.ttc

RUN yum -y install fontconfig \
        && yum -y install mkfontscale \
        && mkfontscale && mkfontdir \
        && fc-cache -fv

构建镜像后,进入容器查看安装的中文字体

[root@acd834g3 /]# fc-list :lang=zh
/usr/share/fonts/my-fonts/simsun.ttc: SimSun:style=Regular
/usr/share/fonts/my-fonts/simsun.ttf: SimSun:style=Regular
/usr/share/fonts/my-fonts/simsun.ttc: NSimSun:style=Regular

到此,已经在docker容器中安装了中文字体。但是,还没解决 html2image 乱码问题。

解决html2image乱码问题

(1)临时解决

进入容器后,将字体复制到jre/lib/fonts/下,重启容器,解决问题。

cp /usr/share/fonts/my-fonts/* /usr/local/jdk1.8/jre/lib/fonts/

(2)彻底解决

在构建基础镜像的时候,将字体复制到jre/lib/fonts/下,修改上面的Dockerfile

FROM centos:7
# install simsun
COPY simsun.ttf /usr/share/fonts/my-fonts/simsun.ttf
COPY simsun.ttc /usr/share/fonts/my-fonts/simsun.ttc
COPY simsun.ttf /usr/local/jdk1.8/jre/lib/fonts/simsun.ttf
COPY simsun.ttc /usr/local/jdk1.8/jre/lib/fonts/simsun.ttc

RUN yum -y install fontconfig \
        && yum -y install mkfontscale \
        && mkfontscale && mkfontdir \
        && fc-cache -fv