docker-compose: 在容器中添加中文字体

本贴最后更新于 2152 天前,其中的信息可能已经时异事殊

利用 docker-compose 的 volumes 及 build 来配置容器内的中文字体。

前言

先上案例代码: liumapp/add-mandarin-fonts-in-docker

Docker 容器内运行的项目,涉及到中文字体的输出时如果没有其他配置,一般都是以乱码结尾。

总结其原因,其实就跟 Linux 下没有中文字体一样。

在 Docker 下部署中文字体,除了写 Dockerfile 之外,也可以利用 docker exec 命令进入容器内部安装字体,但...

这些都太麻烦了呀.....

网络上很多复制粘贴的帖子也都是这样的套路...

其实利用 docker-compose 简单进行两项配置就可以了,完全不用再做其他多余的事情。

docker-compose 配置

先上 docker-compose.yml 的内容

version: '2'

services:
  mandarin:
	container_name: mandarin
	restart: always
	image: liumapp/add-mandarin-fonts-in-docker:v1.0.0
	build:
	  context: .
	  args:
		- LANG=C.UTF-8
	ports:
	  - 8080:8080
	volumes:
	  - ./fonts:/usr/share/fonts
	  - ./pdf:/pdf
	  - ./doc:/doc

比较特殊的地方就两个:build 跟 volumes

build

build:
  context: .
  args:
	- LANG=C.UTF-8
	

设置容器内编码为 UTF-8,使之支持中文字体。

volumes

volumes:
  - ./fonts:/usr/share/fonts
  - ./pdf:/pdf
  - ./doc:/doc

将宿主机,或者说项目下的 fonts 目录下的中文字体全部与容器内的/usr/share/fonts 建立关联,使绝大多数的中文字体都能够被找到。

另外补充一下,案例项目下的 fonts 目录有大约 300 多 M,下面的字体文件是来自于 windows7 下字体库的所有.ttf 和.ttc 结尾的字体文件,这样做的理由,是因为仅仅让 Docker 支持中文字体是远远不够的,我们很多的需求,比如文档转换、图片转换都是需要用到很多不同的字体,所以方便起见,直接拷贝 windows7 下所有的相关字体是最直截了当的方式。

fontconfig

可能有人会注意到,一般在 Linux 下面配置中文字体都是需要用到 fontconfig 这样的工具,然而,在以 Java:8 为 baseImage 的项目下,fontconfig 是自动配置好了的,所以我们不需要额外关心这个家伙。

不过 Java:8 以外的我就没有去尝试了,估计就要多做几步了吧 ~

  • B3log

    B3log 是一个开源组织,名字来源于“Bulletin Board Blog”缩写,目标是将独立博客与论坛结合,形成一种新的网络社区体验,详细请看 B3log 构思。目前 B3log 已经开源了多款产品:SymSoloVditor思源笔记

    1083 引用 • 3461 回帖 • 286 关注
  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。

    476 引用 • 899 回帖
  • 字体
    15 引用 • 31 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...