google-app-engine - 将字体添加到 docker 图像

标签 google-app-engine docker fonts

我的公司有一个 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 镜像更新,这可能是造成差异的原因。

我想验证这一点,但它挖了一个兔子洞,我的组织不希望我花太多时间在上面。如果有人能够这样做,但是我很乐意给你接受的答案。否则我将不得不暂时搁置一下。

最佳答案

字体文件有问题,查看图片报告enter image description here

关于google-app-engine - 将字体添加到 docker 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49637551/

相关文章:

java - 在 Google App Engine 中配置 .Properties 文件

java - Google App Engine Java - 索引和键

docker - 如何将环境变量传递给 Docker 容器?

docker - 在Windows 7中的Docker上运行ASP.NET Core WebApp时出错(调试)

c# - 为什么 C# 中的 fontstyle 枚举缺少粗体斜体?

css - Open Sans SemiBold 在本地主机上似乎不可用

python - Google Cloud Endpoints 可以在 App Engine 模块中运行吗?

google-app-engine - 将 Google App Engine 与我的 Dreamhost 注册域一起使用

php - 无法将 Bitnami Docker Prestashop 部署到适用于 Linux 容器的 Azure Web 应用程序

cocoa-touch - 如何一一绘制布局字形 - 核心文本