Добавление шрифта в изображение докера
У моей компании есть изображение докеров, которое мы используем для гибкости приложения. Мне нужно добавить шрифт, и там, кажется, нет простого 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. Мы добавляем еще несколько вещей, но это материал, относящийся к шрифту.
Выход fc-cache
при создании изображения дает понять, что он обнаруживает один шрифт в каталоге noto:
/usr/share/fonts/truetype/noto: caching, new cache contents: 1 fonts, 0 dirs
И когда я вхожу в контейнер, я вижу, что файл действительно был скопирован. Я даже могу запустить fc-cache
снова вручную и увидеть тот же результат. Однако новый шрифт никогда не отображается в fc-list
.
Это было неприятно диагностировать, потому что следующие аналогичные шаги, похоже, отлично работают на моей машине. Это почти так, как если бы fc-cache
вел себя по-другому в контейнере.
Любые идеи о том, что я могу потерять?
Обновить:
Я добавил строку в файл докера, чтобы явно установить правильные разрешения для файла шрифта после его копирования, но это не имело никакого значения. Это ожидалось, потому что эти команды в конечном счете выполняются как root, но все же это кажется лучшей практикой.
Интересно, однако, что я попробовал это с другим шрифтом (NotoEmoji-Regular.ttf), и это действительно сработало. Я посмотрю, какая разница между этими двумя шрифтами может быть причиной этого.
Очень расстраивает.
Еще одно обновление:
Похоже, что основное отличие, скорее всего, от цвета шрифта, который нестандартен в формате TrueType. Как отмечалось в комментариях, моя система использует более новую версию fontconfig, чем изображение докеров, что, вероятно, объясняет несоответствие.
Я бы хотел проверить это, но он копал немного кроличьей дыры, что моя организация предпочла бы мне не тратить слишком много времени. Если кто-то может это сделать, однако я был бы рад дать вам принятый ответ. В противном случае мне придется оставить это немного.