私の会社には、App Engine Flexに使用するDockerイメージがあります。フォントを追加する必要があり、どこにも単純な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ディレクトリで1つのフォントを検出していることを明確にします。
/usr/share/fonts/truetype/noto: caching, new cache contents: 1 fonts, 0 dirs
そして、コンテナーにログインすると、ファイルが実際にコピーされたことがわかります。 fc-cache
をもう一度手動で実行して、同じ出力を表示することもできます。ただし、新しいフォントがfc-list
に反映されることはありません。
同様の手順に従うことは私のマシンで完全に機能するように見えるので、これを診断するのはイライラしています。まるでfc-cache
がコンテナ内で異なる動作をしているようです。
何が欠けているのかについてのアイデアはありますか?
更新:
Dockerファイルに行を追加して、コピー後にフォントファイルに正しいアクセス許可を明示的に設定しましたが、違いはありませんでした。これらのコマンドは最終的にrootとして実行されるため、これは予想されていましたが、それでもより良い方法のようです。
興味深いことに、私はこれを別のフォント(NotoEmoji-Regular.ttf)で試してみましたが、didで動作しました。これらの2つのフォントの違いが原因となっている可能性があるものについて調べます。
とてもイライラします。
別の更新:
主な違いは、フォントの色であり、TrueType形式では標準ではないようです。コメントで指摘されているように、私のシステムでは、Dockerイメージよりも新しいバージョンのfontconfigを使用しています。
私はこれを確認したいのですが、私の組織があまり多くの時間を費やさないようにするために、うさぎの穴を少し掘り下げています。誰かがそうすることができれば、私はあなたに受け入れられた答えを提供させていただきます。それ以外の場合は、これを少しそのままにする必要があります。
私はDockerファイル内の以下のコマンドを使用してフォントをインストールしましたが、それでうまくいきました。 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注:要件に基づいてフォント名を追加できます。