DockerコンテナがSongtiなどのフォントを認識しない場合の解決策

DockerコンテナがSongtiなどのフォントを認識しない場合の解決策

問題の背景:

docker を使用してプロジェクトをデプロイする場合、プロジェクト内で印刷コントロールを呼び出すときに、デフォルトでシステム フォントが使用されます。Windows にデプロイする場合は問題ありません。ただし、docker コンテナーで実行すると、docker 内に Songti などの関連フォントがないため、システムからエラーが報告され、対応するフォントが見つかりません。

解決:

実は、Linux 自体に Song フォントがない問題を解決するのと同じように、コンテナの問題を解決するのにも使用できます。多くの Docker コンテナの問題は、実際には Linux ソリューションに従うことで解決できることがわかりました。基本的には、Songti ttf ファイルと ttc ファイルをダウンロードし、それらをコンテナのフォント ディレクトリに挿入して、コンテナを再起動するだけです。

解決:

1. コンテナーでサポートされているフォントを確認します。

fc-list :lang=zh

次のような状況が表示される場合は、フォント管理がインストールされておらず、フォントをインストールする必要があることを意味します。

2. フォントライブラリをインストールします。

yum -y フォント設定をインストールします

インストールが完了すると、図に示すように、/usr/share ディレクトリに fontconfig フォルダと fonts フォルダが表示されます。

3. ダウンロードしたフォント ttc および ttf ファイルをコンテナの /usr/share/fonts ファイルにコピーします。

cp simsun.ttc コンテナ:/usr/share/fonts
cp simsun.ttf コンテナ:/usr/share/fonts

4. コンテナを再起動すると、インストールされた中国語フォントが表示されます。

5. この手順を Dockerfile に記述して、イメージのビルド時に自動的に実装することもできます。

補足: Docker | Docker コンテナに中国語フォントをインストールし、utf-8 エンコードを変更する (中国語の文字化け問題を解決する)

1. プロジェクトの背景

開発チームから、プロジェクト運用中に、pagoffice と word を使用して pdf に変換すると文字化けが発生するという報告がありました。この問題は解決されたため、レビュー用にこの記録が作成されました。

2. 問題分析

pagoffice と word を使用して pdf に変換するときに文字化けが発生する問題が 2 つあります。対応する関係は次のとおりです。

pagoffice ---- UTF-8 エンコーディングは使用されず、一部の Docker コンテナでは POSIX がデフォルトで使用されます。

word2pdf ---- 中国語フォントは Linux にインストールされておらず、欠落しています。一部の中国語フォントは Linux および Docker コンテナーにデフォルトでインストールされていますが、中国語フォントは存在しません。

まとめると、コンテナの文字化けの問題を完全に解決するには、次の点を解決する必要があります。1. 中国語をサポートするために utf-8 を使用する。2. 中国語フォントをインストールする。

3. 解決策

3.1. 中国語をサポートするにはUTF-8エンコードを使用する

3.1.1 C.UTF-8エンコーディングの使用

C.UTF-8 エンコーディングを使用すると中国語をサポートできます。公式サイトの Docker イメージはデフォルトで C.UTF-8 エンコーディングをサポートし、使用します。

ロケール -a
#コンテナのすべての言語環境を表示する
ロケール
#コンテナが使用する言語環境を表示する

使用しているイメージが C.UTF-8 でエンコードされていない場合は、コンテナの実行時に次のパラメータを追加することで、このエンコード形式に変更できます。

-e エクスポート LANG="C.UTF-8"

3.1.2 その他の解決策

Docker を起動するときにパラメータを追加することもできます。

-e エクスポート LANG="zh_CN.UTF-8"

しかし、docker公式サイトのイメージを使用しました。パラメータを使用した後、確かに「zh_CN.UTF-8」を使用するように設定されていましたが、インストールされませんでした。エラーが発生します:

ロケール
# 設定された文字セットを表示する
ロケール: LC_CTYPE をデフォルト ロケールに設定できません: そのようなファイルまたはディレクトリはありません
ロケール: LC_MESSAGES をデフォルトのロケールに設定できません: そのようなファイルまたはディレクトリはありません
ロケール: LC_ALL をデフォルト ロケールに設定できません: そのようなファイルまたはディレクトリはありません
LANG=zh_CN.UTF-8

LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_PAPER="zh_CN.UTF-8"
LC_NAME="zh_CN.UTF-8"
LC_ADDRESS="zh_CN.UTF-8"
LC_TELEPHONE="zh_CN.UTF-8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"
LC_ALL= 
ロケール -a
# インストールされている文字セットを表示する
ロケール: LC_CTYPE をデフォルト ロケールに設定できません: そのようなファイルまたはディレクトリはありません
ロケール: LC_MESSAGES をデフォルトのロケールに設定できません: そのようなファイルまたはディレクトリはありません
ロケール: LC_COLLATE をデフォルトに設定できません ロケール: そのようなファイルまたはディレクトリはありません
C
POSIX
en_US.utf8

3.2. 中国語フォントをインストールして中国語を表示する

3.2.1 既存のフォントを表示する

Linux の現在のフォントをすべて表示

fcリスト

Linux で現在利用可能なすべての中国語フォントを表示する

fc-list :lang=zh

3.2.2 他のフォントを入手する

Windows システムでは、フォントは C:\Windows\Fonts の下に存在します。コピー後、Linux サーバーの /opt/software/chinese にアップロードします (docker コンテナーにフォントをインストールします。Linux ホストにフォントをインストールする場合は、サーバーの /usr/share/fonts/ フォルダーに直接配置します)。

3.2.2 コンテナへのフォントのインストール

ドッカーps -a
#コンテナの表示
docker cp /opt/software/chinese tomcat:/usr/share/fonts/
#tomcatはコンテナ名です
docker exec -it tomcat /bin/bash
#コンテナに入る

chmod 644 -R 中国語/
承認フォルダ
fc-list :lang=zh
#中国語フォントを表示

fc-キャッシュ -fv
# キャッシュを更新する

3.3. 検証

pagoffice ---- dockerコンテナを変更した後は、コンテナを再起動する必要があります

word2pdf ---- フォントキャッシュを更新します。コンテナを再起動する必要はありません。

上記は私の個人的な経験です。参考になれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。間違いや不備な点がありましたら、遠慮なくご指摘ください。

以下もご興味があるかもしれません:
  • 非ルートユーザーを使用してDockerコンテナでスクリプト操作を実行する
  • Dockerコンテナにホストディレクトリへの書き込み権限がない場合の解決策
  • Dockerコンテナの中国語言語パックの設定の問題を解決する
  • Docker の win ping 失敗コンテナ回避ガイド
  • DockerコンテナでJupyterノートブックを設定する方法
  • Dockerはコンテナポートバインディングのローカルポートを実装します
  • docker run後にコンテナがExited (0)と表示される問題を解決する
  • Dockerはコンテナに入るためにルートを使用する

<<:  ウェブサイトの再設計はどの家族にとっても難しい作業です

>>:  WEB 標準ウェブページ構造

推薦する

Linux での中国語入力方法の問題を素早く解決する

背景: 最近、資産報告関連の機能に取り組んでおり、中国語入力をサポートする必要があります。通常のショ...

VMware ESXi のインストールと使用記録(ダウンロード付き)

目次1. ESXiをインストールする2. ESXiをセットアップする3. ESXiを起動するESXi...

WeChatアプレットが連携メニューを実現

最近はコース設計を実現するために、フロントエンドも少しやっています。今日はいくつかの機能を実現するた...

一般的な XHTML タグの紹介

<br />しばらくの間、多くの人が XHTML の使い方を知らないことに気付きました。...

アクセス速度を上げるためにウェブサイトを最適化する方法の更新

最近、同社はitpubを皮切りに、コーポレートウェブサイト傘下の全サイトの評価を開始した。そのために...

Dockerでボリュームを管理する2つの方法

前回の記事では、Dockerの基礎知識であるローカルディレクトリのマウント方法を紹介しました。今日は...

Win10 の Linux サブシステムを有効にする方法を説明します (詳細な画像とテキスト付き)

今日は、Windows 10 で Linux サブシステムを有効にする方法を紹介します。早速、手順を...

JavaScript の BigIn 関数の共通プロパティをまとめます

目次1. 概要2. 属性1. 数学演算子2. 比較演算子3. ブール演算結論1. 概要BigInt ...

HTML はモバイル上で固定フローティング半透明検索ボックスを実装します

質問。モバイルショッピングモールシステムでは、ページの上部に検索ボックスがよく見られます。ブロガーは...

MySQLのレプリケーションとチューニングの原則と方法を分析する

1. はじめにMySQL にはレプリケーション ソリューションが付属しており、次のような利点がありま...

vueを使用して登録ページの効果を実現し、vueを使用してSMS認証コードログインを実現します

この記事の例では、登録ページの効果を実現するためのVueの具体的なコードを参考までに共有しています。...

CSS3 は下部に固定されたフッターを実装します (ページの高さに関係なく常に下部にあります)

序文フッター領域を下部に固定します。ページの高さや幅に関係なく、モバイル メニューと同様に、フッター...

MySQL 5.7.20\5.7.21 無料インストール版のインストールと設定のチュートリアル

参考までに、mysql 5.7.20 / 5.7.21 をダウンロード、インストール、構成します。具...

MySQL における大規模オブジェクトのマルチバージョン同時実行制御の詳細な説明

MySQL 8.0: InnoDB のラージ オブジェクトに対する MVCCこの記事では、MySQL...

MySQL 5.7.18 インストーラーのインストール ダウンロード グラフィック チュートリアル

この記事では、MySQL 5.7.18インストーラーの詳細なインストールチュートリアルを参考までに記...