Google app engine 向docker图像添加字体

Google app engine 向docker图像添加字体,google-app-engine,docker,fonts,Google App Engine,Docker,Fonts,我的公司有一个docker图像,我们用于app engine flex。我需要添加一个字体,而且似乎没有一个简单的apt包,所以我需要手动添加它,按照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

我的公司有一个docker图像,我们用于app engine flex。我需要添加一个字体,而且似乎没有一个简单的apt包,所以我需要手动添加它,按照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缓存
输出清楚地表明它在noto目录中检测到一种字体:

/usr/share/fonts/truetype/noto: caching, new cache contents: 1 fonts, 0 dirs
当我登录到一个容器时,我看到文件确实被复制了。我甚至可以再次手动运行
fc cache
,并查看相同的输出。但是,新字体从未反映在
fc列表中

诊断这一点很令人沮丧,因为在我自己的机器上,遵循类似的步骤似乎可以完美地工作。这几乎就好像
fc cache
在容器中的行为有所不同

有没有关于我可能遗漏什么的想法

更新:

我在docker文件中添加了一行,以便在复制字体文件后显式地设置字体文件的正确权限,但没有任何区别。这是意料之中的,因为这些命令最终以root运行,但这似乎是一种更好的做法

不过,有趣的是,我用另一种字体(notemoji Regular.ttf)尝试了一下,它确实起了作用。我将研究这两种字体之间的差异是什么导致了这种情况

非常令人沮丧

另一个更新:

看起来主要的区别可能是字体中的颜色,这在TrueType格式中是不标准的。正如评论所指出的,我的系统使用的是比docker映像更新的fontconfig版本,这可能是造成差异的原因


我想证实这一点,但这是在挖一个兔子洞,我的组织希望我不要花太多的时间。但是,如果有人能够这样做,我很乐意给你一个公认的答案。否则,我将不得不将此保留一段时间。

这是字体文件的问题,请检查图像中的报告,我在Docker文件中使用了下面的commnad来安装字体,这对我很有效

RUN apt update && apt install fonts-indic -y \
    && fc-cache -f    


注意:您可以根据您的要求添加更多字体名称。

我知道有这样的问题,但以防万一,您是否可以遵循(从Dockerfile完成)并查看最终结果(图像)是否包含预期的字体?是否是因为大小?看起来所有的字体都小于1MB,而这个是5MB+?这可能不是docker的问题,而是
fc
版本的环境问题。我在Ubuntu 16.04 docker上进行了测试,我的
fc list
运行良好。
fc列表-V fontconfig版本2.11.94
。但是对于
debian 8
debian 9
来说,版本是
2.11.0
。现在,这可能是
fc
本身的一个bug,也可能是dependencies@TarunLalwani我有相同的版本差异。很可能就是这样,特别是因为所讨论的字体是彩色字体,因此在TrueType中不标准。最终,在这种情况下,我将使用非彩色字体,但当我有时间时,我会看看是否可以在图像上更新fc。是否可以将您的字体托管在云存储中?在我看来,你可能正试图将它与应用程序捆绑在一起,从而让自己陷入了一种不必要的头痛。是的,我想这是由于字体中使用了颜色而导致的兼容性问题。我对这种字体读得越多,对它的惊讶就越少。不过,在日志中看到它会有所帮助,所以谢谢!根据这个github链接,这似乎是社区已知的问题。但不确定是否会很快解决。
RUN apk add font-noto-gujarati font-noto-kannada font-noto-avestan font-noto-osage font-noto-kayahli font-noto-oriya font-noto-telugu font-noto-tamil font-noto-bengali font-noto-malayalam font-noto-arabic font-noto-extra \
    && fc-cache -f