当在Docker容器中运行应用程序时遇到缺少字体的问题,通常是因为基础镜像中没有包含所需的字体文件。以下是几种解决方案:
# 对于基于Debian/Ubuntu的镜像
RUN apt-get update && apt-get install -y \
fonts-dejavu \
fonts-liberation \
fonts-noto \
ttf-mscorefonts-installer \
&& rm -rf /var/lib/apt/lists/*
# 对于基于Alpine的镜像
RUN apk add --no-cache \
fontconfig \
msttcorefonts-installer \
&& update-ms-fonts \
&& fc-cache -f
fonts/
文件夹COPY fonts/ /usr/share/fonts/
RUN fc-cache -f -v
FROM python:3.9-slim # 或其他包含字体的镜像
ENV JAVA_OPTS="-Djava.awt.headless=true -Djava.awt.fonts=/usr/share/fonts/"
构建镜像后,可以进入容器验证:
docker run -it your-image bash
# 在容器内运行
fc-list # 列出已安装字体
fc-cache -f
刷新字体缓存RUN apt-get update && apt-get install -y \
libfreetype6 \
&& rm -rf /var/lib/apt/lists/*
# 或者在Python代码中设置
import matplotlib
matplotlib.rcParams['font.family'] = 'DejaVu Sans'
RUN apt-get update && apt-get install -y \
fonts-liberation \
fonts-noto-cjk \
&& rm -rf /var/lib/apt/lists/*
选择最适合您应用场景的方法,通常方法1或方法2是最常用的解决方案。