代码之家  ›  专栏  ›  技术社区  ›  sripberger

向docker图像添加字体

  •  18
  • sripberger  · 技术社区  · 7 年前

    我的公司有一个docker图像,我们用于app engine 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缓存 再次手动查看相同的输出。然而,新字体从未反映在 fc-list

    诊断这个问题很令人沮丧,因为在我自己的机器上,遵循类似的步骤似乎可以完美地工作。就好像 fc缓存 在容器中的行为不同。

    对我可能遗漏的内容有什么想法吗?

    更新时间:

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

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

    非常令人沮丧。

    其他更新:

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

    我很想验证这一点,但这是在挖一个兔子洞,我的组织希望我不要在上面花费太多时间。如果有人能做到这一点,我很乐意给你一个公认的答案。否则我就得把这件事搁一会儿。

    3 回复  |  直到 7 年前
        1
  •  1
  •   Allen    7 年前

    字体文件有问题,请检查图像中的报告 enter image description here

        2
  •  0
  •   ahmet alp balkan    4 年前

    我在Docker文件中使用了下面的commnad来安装字体,这对我很有用。

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

    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
    

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

        3
  •  0
  •   Павел К.    2 年前

    尝试添加到dockerfile

    # install fontconfig
    RUN apt-get update; apt-get install -y fontconfig
    
    # refresh system font cache
    RUN fc-cache -f -v