我的公司有一个 docker 镜像,我们将其用于应用引擎 flex。我需要添加一个字体,而且似乎没有一个简单的 apt 包,所以我需要手动添加它,按照列出的步骤 here用于 Linux 上的命令行安装。到目前为止,这是我所拥有的:
FROM gcr.io/google_appengine/python
# ...
# Copy the font to the appropriate location.
# The font is in a ttf in the same directory as the Dockerfile.
RUN mkdir -p /usr/share/fonts/truetype/noto
COPY NotoColorEmoji.ttf /usr/share/fonts/truetype/noto
RUN chmod 644 /usr/share/fonts/truetype/noto/*
# Rebuild the font cache.
RUN fc-cache -fv
如您所见,该图像基于 GAE 基础 python 图像。我们还添加了一些其他内容,但这是与字体相关的内容。
构建图像时的 fc-cache
输出清楚地表明它正在检测 noto 目录中的一种字体:
/usr/share/fonts/truetype/noto: caching, new cache contents: 1 fonts, 0 dirs
当我登录到一个容器时,我看到文件确实被复制了。我什至可以再次手动运行 fc-cache
并看到相同的输出。然而,新字体从未反射(reflect)在 fc-list
中。
诊断此问题令人沮丧,因为执行类似步骤似乎在我自己的机器上完美运行。就好像 fc-cache
在容器中的行为不同。
关于我可能缺少什么的任何想法?
更新:
我在 docker 文件中添加了一行,以在复制字体文件后显式设置字体文件的正确权限,但没有任何区别。这是意料之中的,因为这些命令最终以 root 身份运行,但它似乎仍然是一种更好的做法。
不过,有趣的是,我尝试使用不同的字体 (NotoEmoji-Regular.ttf),它确实 工作。我将研究这两种字体之间的差异可能是什么原因造成的。
非常沮丧。
另一个更新:
似乎主要区别可能是字体中的颜色,这在 TrueType 格式中是非标准的。正如评论所指出的,我的系统使用的 fontconfig 版本比 docker 镜像更新,这可能是造成差异的原因。
我想验证这一点,但它挖了一个兔子洞,我的组织不希望我花太多时间在上面。如果有人能够这样做,但是我很乐意给你接受的答案。否则我将不得不暂时搁置一下。
最佳答案
关于google-app-engine - 将字体添加到 docker 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49637551/