docker容器内部 -- 安装中文字体
【代码】node-red容器内部解决中文字体问题。
·
Alpine基础镜像 -- 安装中文字体
# Alpine基础镜像 -- 安装字体
# 使用root账户
docker exec -u 0 -it node-red /bin/bash
# 安装字体管理工具
apk add --no-cache fontconfig ttf-dejavu
# 安装中文字体 -- 一定要使用加速 否则太慢了
sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && apk add --no-cache wqy-zenhei font-noto-cjk
# 详细输出缓存更新过程
fc-cache -fv
# 查看字体
fc-list : family
# 使用用户账户
docker exec -it node-red /bin/bash
# 定位缓存目录(我的运行结果是 /root/.cache/matplotlib)
python -c "import matplotlib; print(matplotlib.get_cachedir())"
# 删除缓存文件
rm -rf ~/.cache/matplotlib/*
# python中查看字体是否生效
echo '
from matplotlib import font_manager
print([f.name for f in font_manager.fontManager.ttflist if "WenQuanYi Zen Hei" in f.name])
' > 1.py
cat 1.py
python3 1.py
Debian/Ubuntu 基础镜像 -- 安装中文字体
# Debian/Ubuntu 基础镜像 -- 安装字体
# 使用root账户 默认好像就是root用户 可以不用加 -u 0
docker exec -u 0 -it python-3-9-slim /bin/bash
# 查看镜像系统
uname -a
Linux 0d72adff0060 6.8.0-62-generic #65-Ubuntu SMP PREEMPT_DYNAMIC Mon May 19 17:15:03 UTC 2025 x86_64 GNU/Linux
# 安装字体管理工具
apt-get update && apt-get install -y fontconfig
# 在 Ubuntu 的默认 sources.list 文件中,软件源通常分为两类:
# 1.主软件源(archive.ubuntu.com)——提供常规软件包
# 2.安全更新源(security.ubuntu.com)——专门提供安全补丁和关键更新
# 安装中文字体 -- Debian 加速
sed -i 's|deb.debian.org|mirrors.aliyun.com|g' /etc/apt/sources.list && \
sed -i 's|security.debian.org|mirrors.aliyun.com|g' /etc/apt/sources.list && \
apt update && apt install fonts-wqy-zenhei fonts-noto-cjk
# 安装中文字体 -- Ubuntu 加速
sed -i 's|archive.ubuntu.com|mirrors.aliyun.com|g' /etc/apt/sources.list && \
sed -i 's|security.ubuntu.com|mirrors.aliyun.com|g' /etc/apt/sources.list && \
apt update && apt install fonts-wqy-zenhei fonts-noto-cjk
# 使用普通用户去清缓存
docker exec -it python-3-9-slim /bin/bash
# 详细输出缓存更新过程
fc-cache -fv
# 查看字体
fc-list : family
# 定位缓存目录(我的运行结果是 /root/.cache/matplotlib)
python3 -c "import matplotlib; print(matplotlib.get_cachedir())"
# 删除缓存文件
rm -rf /root/.cache/matplotlib/*
# python中查看字体是否生效
echo '
from matplotlib import font_manager
print([f.name for f in font_manager.fontManager.ttflist if "WenQuanYi Zen Hei" in f.name])
' > 1.py
cat 1.py
python3 1.py
matplotlib绘图测试
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
simple_df = pd.DataFrame({
'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Age': [25, 32, 37, 28],
'Salary': [50000, 65000, 72000, 48000]
})
simple_df
plt.rcParams['font.sans-serif'] = ['WenQuanYi Zen Hei']
plt.rcParams['axes.unicode_minus'] = False
plt.figure(figsize=(10, 6))
plt.bar(simple_df['Name'], simple_df['Salary'])
plt.title('员工薪资分布')
plt.xlabel('姓名')
plt.ylabel('薪资')
plt.grid(True)
# plt.show()
plt.savefig(
'/data/test/1.png',
dpi=100, # 分辨率(默认100,300更清晰)
bbox_inches='tight', # 自动裁剪空白
facecolor='white' # 背景色
)
# 关闭图形(避免内存泄漏)
plt.close()

更多推荐
所有评论(0)