整体思路
因为我当前容器部署方式为 docker swarm
+docker-compose
,为将服务发布在各个node节点上,也在网上看了在构建服务镜像时就预装中文字体,但是多次尝试最终以失败告终,于是换用 volumes 挂载宿主机字体目录方式解决,下面介绍具体操作方法:
为docker swarm 集群内各个节点安装中文字体
1. 上传中文字体包
ansible docker-swarm -m copy -a “src=/root/fonts.tar.gz dest=/usr/share”


2. 安装linux使用字体工具
ansible docker-swarm -m yum -a “name=fontconfig state=present”
ansible docker-swarm -m yum -a “name=ttmkfdir state=present”
3. 解压字体压缩包,配置中文字体生效
ansible docker-swarm -m shell -a “cd /usr/share/ ;tar -zxf fonts.tar.gz;chmod -R 755 /usr/share/fonts/chinese;fc-cache;fc-list | grep chinese”
ansible docker-swarm -m shell -a “ls /usr/share/fonts/chinese”
4. 修改原Dockerfile 及docker-compose文件
具体见:https://teamcity2.aegis-info.com/admin/editBuildParams.html?id=buildType:Intelligentlawmanageservice_Build66 的env.build.docker.deploy部分
在Dockerfile中添加配置
export LANG=C.UTF-8
在 docker-compose中添加配置
volumes: - /usr/share/fonts:/usr/share/fonts

5. teamcity run 该 build

6. 在服务器上检查容器字体是否生效
docker service ps law-manage-service_java-app
docker ps |grep law
docker exec -it b21a06209de2 bash
ls /usr/share/fonts/chinese/
locale -a
收工!
test1