docker 容器添加中文字体支持:基于 openjdk:21-slim 制作带中文字体的镜像

望舒的头像
望舒
标签:
dockerfiledocker 字体支持docker 镜像linux

🐳 Docker 容器添加中文字体支持:基于 openjdk:21-slim 制作带中文字体的镜像

在日常 Java 开发与部署中,经常会遇到生成 PDF、导出报表、图表渲染或前端预览等需要中文字体的场景。但使用官方精简版镜像(例如 openjdk:21-slim)时,由于镜像极度瘦身,默认并不包含任何中文字体,导致容器里渲染中文时出现方块、问号或乱码。

下面分享一种简单的方法:在 openjdk:21-slim 镜像中安装字体支持,解决中文显示问题,并最终打包生成一个 自带中文字体支持的 JDK 镜像

📦 已构建好的镜像

如果不想自己构建,也可以直接使用我在 Docker Hub 发布的镜像:

复制
docker pull wangshu10086/common-developer-images:openjdk-21-slim-font-support

注:可能需要科学上网(魔法 ✨)才能拉取。

步骤概览

1️⃣安装字体支持组件

复制
RUN apt-get update && apt-get install -y fontconfig

2️⃣ 准备中文字体

推荐将常用中文字体(比如微软雅黑、思源黑体、苹方等)拷贝到本地 font 目录。 例如可以直接从 Windows 的 C:\Windows\Fonts 中复制需要的 .ttf 字体。

3️⃣ 拷贝字体到镜像,并刷新字体缓存

复制
COPY font/* /usr/share/fonts
RUN chmod -R 755 /usr/share/fonts && fc-cache -f -v

🛠️ 完整 Dockerfile 示例

复制
FROM openjdk:21-slim
LABEL authors="wangshu10086"

RUN apt-get update && apt-get install -y fontconfig

RUN mkdir -p /usr/share/fonts

# 拷贝本地字体到容器
COPY font/* /usr/share/fonts

# 设置权限 & 刷新缓存
RUN chmod -R 755 /usr/share/fonts && fc-cache -f -v

延伸阅读

构建并发布镜像到 Docker Hub 的详细过程,可参考我这篇文章: 👉 如何基于 openjdk:21-slim 添加中文字体并发布到 Docker Hub

📝 总结

  • openjdk:21-slim 默认不带中文字体,导致 Docker 部署后中文乱码
  • 安装 fontconfig + 自定义字体,即可解决
  • 推荐把常用字体打包到镜像里,发布后团队直接复用

作者:https://blog.xn--rpv331d.com/望舒

链接:https://blog.xn--rpv331d.com/望舒/blog/42

转载注意保留文章出处...

‌‌‌‌‌​‌‌‌‌​​‌‌‌‌‌​‌‌‌​​‌‌‌​‌‌‌‌‌‌‌‌‌‌‌​‌‌‌​‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌​‌‌‌​‌‌‌‌‌‌‌‌​​‌‌‌‌‌​‌‌‌‌​‌‌‌​‌‌​‌‌‌​‌‌‌​​‌‌‌‌‌‌​‌‌‌​‌‌‌​​‌‌‌‌‌‌​‌‌‌‌‌‌‌​‌‌‌‌​​‌​‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌​​‌​‌‌‌​‌‌‌‌​‌‌‌​​‌‌‌‌‌‌‌‌‌‌‌‌‌‌​​‌​‌‌‌​‌‌‌​​‌‌‌​‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌​‌‌‌‌‌​​‌​​‌‌​​​​​‌​‌‌‌‌​‌‌​‌​‌​​‌​‌‌​‌​​​​‌​​​‌‌​‌​‌‌‌‌‌‌​‌‌‌‌​​‌‌‌‌‌​‌‌‌‌​‌‌‌​‌‌​‌‌‌‌‌‌‌‌​‌‌‌​‌‌‌‌‌‌​‌‌‌‌‌‌‌‌​‌‌‌‌‌‌​‌‌‌​​‌‌‌‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌​​‌​‌‌‌​‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌​‌‌‌‌​​‌​‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌​‌‌‌‌‌‌​‌‌‌​​‌‌‌​​‌‌‌‌‌​‌‌‌​​‌‌‌​​‌‌‌‌‌​‌‌‌​​‌‌‌​‌‌‌‌‌‌​‌‌‌​​‌‌‌‌‌‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌​‌‌‌‌‌‌‌‌‌‌‌‌‌​‌​‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌​​‌‌‌‌‌​‌‌‌‌‌‌‌‌‌​‌​‌‌‌​‌‌‌‌​‌‌‌‌​‌​‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌​‌‌‌​‌‌‌‌​‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌​​‌​‌‌‌‌‌‌‌‌‌‌‌‌​​‌​‌‌‌​‌‌‌​​‌‌‌‌‌‌‌‌‌‌​‌‌‌​​‌‌‌​‌‌‌‌‌‌​‌‌‌​​‌‌‌‌​‌‌‌‌‌‌‌‌‌​​‌‌‌‌‌‌​‌‌‌‌‌‌‌​​‌‌‌‌‌‌​‌‌‌‌‌‌‌​​‌‌‌​‌‌​‌‌‌​‌‌‌‌​‌‌‌​​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌​‌‌‌​‌‌‌‌‌‌‌‌‌​‌​‌‌‌​‌‌‌‌‌‌‌‌​​‌​‌‌‌‌‌‌‌‌‌‌‌‌‌​‌​‌‌‌‌​‌​​‌​​‌‌‌​​​‌‌‌​​‌​​‌​‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌​‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌​‌‌‌​‌‌‌‌‌‌‌‌​​‌‌‌‌‌​‌‌‌‌​‌‌‌​‌‌​‌‌‌​‌‌‌​​‌‌‌‌‌‌​‌‌‌​‌‌‌​​‌‌‌‌‌‌​‌‌‌‌‌‌‌​‌‌‌‌​​‌​‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌​​‌​‌‌‌​‌‌‌‌​‌‌‌​​‌‌‌‌‌‌‌‌‌‌‌‌‌‌​​‌​‌‌‌​‌‌‌‌​‌‌‌​‌‌​‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌​‌‌‌‌‌‌​‌‌‌​​‌‌‌​​‌‌‌‌‌​‌‌‌‌​‌‌‌​‌‌​‌‌‌​‌‌‌​​‌‌‌‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌​‌​‌‌‌​‌‌‌‌​‌‌‌​​‌​‌‌‌​‌‌‌​​‌‌‌​​‌‌‌‌‌‌‌‌‌​‌‌‌‌​​‌​‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​‌‌‌​‌‌​‌‌​‌​‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌​​‌‌‌‌‌​‌‌‌‌​‌‌‌​‌‌​‌‌‌​‌‌‌‌‌‌‌‌‌​‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌​‌‌‌‌‌​‌‌‌‌‌‌‌‌​‌‌‌‌‌‌​‌‌‌​​‌‌‌​​‌‌‌‌‌​‌‌‌​​‌‌‌​​‌‌‌‌‌​‌‌‌​​‌‌‌​‌‌‌‌‌‌​‌‌‌​​‌‌‌‌‌‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌​‌‌‌‌‌‌‌‌‌‌‌‌‌​‌​‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌​​‌‌‌‌‌​‌‌‌‌‌‌‌‌‌​‌​‌‌‌​‌‌‌‌​‌‌‌‌​‌​‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌​‌‌‌​‌‌‌‌​‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌​​‌​‌‌‌‌‌‌‌‌‌‌‌‌​​‌​‌‌‌​‌‌‌​​‌‌‌‌‌‌‌‌‌‌​‌‌‌​​‌‌‌​‌‌‌‌‌‌​‌‌‌​​‌‌‌‌​‌‌‌‌‌‌‌‌‌​​‌‌‌‌‌‌​‌‌‌‌‌‌‌​​‌‌‌‌‌‌​‌‌‌‌‌‌‌​​‌‌‌​‌‌​‌‌‌​‌‌‌‌​‌‌‌​​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌​‌‌‌​‌‌‌‌‌‌‌‌‌​‌​‌‌‌​‌‌‌‌‌‌‌‌​​‌​‌‌‌‌‌‌‌‌‌‌‌‌‌​‌​‌‌‌‌​‌​​‌​​‌‌‌​​​‌‌‌​​‌​​‌​‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌​​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌​‌‌‌​‌‌‌‌​‌‌‌​‌‌​‌‌‌‌‌‌‌​‌‌‌‌‌​‌‌‌‌‌‌‌‌‌​‌‌‌‌​​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌​‌‌‌​‌‌‌​​‌‌‌​‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌​‌‌‌‌‌‌‌‌‌​‌‌‌‌​​‌‌‌‌‌​‌‌‌​​‌‌‌​‌‌‌‌‌‌‌‌‌‌‌​‌‌‌​‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌​‌‌‌​‌‌‌‌‌‌‌‌​​‌‌‌‌‌​‌‌‌‌​‌‌‌​‌‌​‌‌‌​‌‌‌​​‌‌‌‌‌‌​‌‌‌​‌‌‌​​‌‌‌‌‌‌​‌‌‌‌‌‌‌​‌‌‌‌​​‌​‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌​​‌​‌‌‌​‌‌‌‌​‌‌‌​​‌‌‌‌‌‌‌‌‌‌‌‌‌‌​​‌​‌‌‌​‌‌‌​​‌‌‌​‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌​‌‌‌‌​​‌​​​‌‌‌‌‌​‌‌‌​‌‌​‌‌‌​​‌‌​​​​​​​‌​​​​‌​​​‌‌​‌​‌‌‌‌‌‌​‌‌‌‌​​‌‌‌‌‌​‌‌‌‌​‌‌‌​‌‌​‌‌‌‌‌‌‌‌​‌‌‌​‌‌‌‌‌‌​‌‌‌‌‌‌‌‌​‌‌‌‌‌‌​‌‌‌​​‌‌‌‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌​​‌​‌‌‌​‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌​‌‌‌‌​​‌​‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌​‌‌‌‌‌‌​‌‌‌​​‌‌‌​​‌‌‌‌‌​‌‌‌​​‌‌‌​​‌‌‌‌‌​‌‌‌​​‌‌‌​‌‌‌‌‌‌​‌‌‌​​‌‌‌‌‌‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌​‌‌‌‌‌‌‌‌‌‌‌‌‌​‌​‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌​​‌‌‌‌‌​‌‌‌‌‌‌‌‌‌​‌​‌‌‌​‌‌‌‌​‌‌‌‌​‌​‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌​‌‌‌​‌‌‌‌​‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌​​‌​‌‌‌‌‌‌‌‌‌‌‌‌​​‌​‌‌‌​‌‌‌​​‌‌‌‌‌‌‌‌‌‌​‌‌‌​​‌‌‌​‌‌‌‌‌‌​‌‌‌​​‌‌‌‌​‌‌‌‌‌‌‌‌‌​​‌‌‌‌‌‌​‌‌‌‌‌‌‌​​‌‌‌‌‌‌​‌‌‌‌‌‌‌​​‌‌‌​‌‌​‌‌‌​‌‌‌‌​‌‌‌​​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌​‌‌‌​‌‌‌‌‌‌‌‌‌​‌​‌‌‌​‌‌‌‌‌‌‌‌​​‌​‌‌‌‌‌‌‌‌‌‌‌‌‌​‌​‌‌‌‌​‌​​‌​​‌‌‌​​​‌‌‌​​‌​​‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌​‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌​​‌‌‌‌‌​‌‌‌‌‌‌‌‌‌​‌​‌‌‌​‌‌‌‌​‌‌‌‌​‌​‌‌‌‌‌‌‌‌‌‌‌‌‌​‌​‌‌‌‌‌‌‌​​‌‌‌​​‌‌‌‌‌‌‌‌‌​​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌​‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌​‌‌‌​‌‌‌‌‌‌‌‌​​‌‌‌‌‌​‌‌‌‌​‌‌‌​‌‌​‌‌‌​‌‌‌​​‌‌‌‌‌‌​‌‌‌​‌‌‌​​‌‌‌‌‌‌​‌‌‌‌‌‌‌​‌‌‌‌​​‌​‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌​​‌​‌‌‌​‌‌‌‌​‌‌‌​​‌‌‌‌‌‌‌‌‌‌‌‌‌‌​​‌​‌‌‌​‌‌‌‌​‌‌‌​‌‌​‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌​‌‌‌‌‌‌​‌‌‌​​‌‌‌​​‌‌‌‌‌​‌‌‌‌​‌‌‌​‌‌​‌‌‌​‌‌‌​​‌‌‌‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌​‌​‌‌‌​‌‌‌‌​‌‌‌​​‌​‌‌‌​‌‌‌​​‌‌‌​​‌‌‌‌‌‌‌‌‌​‌‌‌‌​​‌​‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​‌‌‌​‌‌​‌‌​‌​‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌​​‌‌‌‌‌​‌‌‌‌​‌‌‌​‌‌​‌‌‌​‌‌‌‌‌‌‌‌‌​‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌​‌‌‌‌‌​‌‌‌‌‌‌‌‌​‌‌‌‌‌‌​‌‌‌​​‌‌‌​​‌‌‌‌‌​‌‌‌​​‌‌‌​​‌‌‌‌‌​‌‌‌​​‌‌‌​‌‌‌‌‌‌​‌‌‌​​‌‌‌‌‌‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌​‌‌‌‌‌‌‌‌‌‌‌‌‌​‌​‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌​​‌‌‌‌‌​‌‌‌‌‌‌‌‌‌​‌​‌‌‌​‌‌‌‌​‌‌‌‌​‌​‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌​‌‌‌​‌‌‌‌​‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌​​‌​‌‌‌‌‌‌‌‌‌‌‌‌​​‌​‌‌‌​‌‌‌​​‌‌‌‌‌‌‌‌‌‌​‌‌‌​​‌‌‌​‌‌‌‌‌‌​‌‌‌​​‌‌‌‌​‌‌‌‌‌‌‌‌‌​​‌‌‌‌‌‌​‌‌‌‌‌‌‌​​‌‌‌‌‌‌​‌‌‌‌‌‌‌​​‌‌‌​‌‌​‌‌‌​‌‌‌‌​‌‌‌​​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌​‌‌‌​‌‌‌‌‌‌‌‌‌​‌​‌‌‌​‌‌‌‌‌‌‌‌​​‌​‌‌‌‌‌‌‌‌‌‌‌‌‌​‌​‌‌‌‌​‌​​‌​​‌‌‌​​​‌‌‌​​‌​​‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌​‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌​​‌‌‌‌‌​‌‌‌‌‌‌‌‌‌​‌​‌‌‌​‌‌‌‌​‌‌‌‌​‌​‌‌‌‌‌‌‌‌‌‌‌‌‌​‌​‌‌‌‌‌‌‌​​‌‌‌​​‌‌‌‌‌‌‌‌‌​​‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌​​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌​‌‌‌​‌‌‌‌​‌‌‌​‌‌​‌‌‌‌‌‌‌​‌‌‌‌‌​‌‌‌‌‌‌‌‌‌​‌‌‌‌​​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌​‌‌‌​‌‌‌​​‌‌‌​‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌​‌‌‌‌‌‌‌‌‌​‌‌‌‌​​‌‌‌‌‌​‌‌‌​​‌‌‌​‌‌‌‌‌‌‌‌‌‌‌​‌‌‌​‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌​‌‌‌​‌‌‌‌‌‌‌‌​​‌‌‌‌‌​‌‌‌‌​‌‌‌​‌‌​‌‌‌​‌‌‌​​‌‌‌‌‌‌​‌‌‌​‌‌‌​​‌‌‌‌‌‌​‌‌‌‌‌‌‌​‌‌‌‌​​‌​‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌​​‌​‌‌‌​‌‌‌‌​‌‌‌​​‌‌‌‌‌‌‌‌‌‌‌‌‌‌​​‌​‌‌‌​‌‌‌​​‌‌‌​‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌​‌‌‌‌‌​​​​‌‌‌‌​​​​‌‌‌‌​​​​​‌‌‌​​​​​‌‌‌​‌‌​‌‌​‌​​‌‌‌​​‌‌‌‌‌‌‌​​‌‌​​​​‌‌​​‌​​‌‌​​​​​​​​​​‌‌​​‌​​‌​‌​​​‌‌‌‌‌​‌​​​‌‌​​​​​​​​‌‌‌​​‌​​‌‌‌​​​​‌‌‌​‌‌‌‌‌‌​‌​​​‌‌‌‌‌​‌​​​​​‌​‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌​‌‌‌‌​​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌​‌‌‌​‌‌‌​​‌‌‌​‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌​‌‌‌‌
No data