はじめに
現場にて、運用上バッチをデプロイする時に使われていたDockerFile(が記入されている.sh)がありました。
そのDockerFileを更新する際、なかなか解消できない問題が発生したため、知識共有として記事に残そうと思います。
背景
2025年でAmazonLinux2(以下AL2)がサポート終了するため、DockerFileもAmazonLinux2023(以下AL2023)に変更する対応を行った。
変更したらどうなったか?
デプロイしたバッチからはログを出力していたが、AL2の時は正常だったログが、AL2023に更新すると文字化けが発生していた。
どんな処理だったか?
cat << _EOF ${_DIR_}/DockerFile
- FROM amazonlinux:2
+ FROM amazonlinux:latest
ADD ${NAME}.tar.gz /opt/
ENV_NAME=en_US.UTF-8
WORKDIR /opt/${NAME}
RUN yum install -y java-11-amazon-corretto
_EOF
amazonlinux:latestと記入すれば最新のDockerイメージを取得するようになります。
記載時点ではAL2023が最新です。
原因は?
AL2とAL2023のデフォルトでインストールされているパッケージに差があった。
どんな差があったか?
・AL2ではglibc-langpack-enがデフォルトでインストールされているため、en_US.UTF-8に対応していた。
・AL2023はglibc-langpack-enがデフォルトでインストールされていないため、en_US.UTF-8に対応していなかった。
Q:glibc-langpack-enとは?
A:Linux環境で英語を使えるようにするためのロケールパッケージです。
どう対応したか?
- ロケール設定の追加を行った
- ロケールパッケージ(glibc-langpack-en)のインストールを行った
上記2点を対応したことにより、無事文字化けが解消された。
cat << _EOF ${_DIR_}/DockerFile
FROM amazonlinux:latest
ADD ${NAME}.tar.gz /opt/
ENV_NAME=en_US.UTF-8
+ ENV_LANGUAGE=en.US:en
+ ENV_LC_ALL=en.US.UTF-8
WORKDIR /opt/${NAME}
RUN yum install -y java-11-amazon-corretto ¥
+ && yum install -y glibc-langpack-en
_EOF
Q:ロケール設定とは?
A:システムのデフォルト言語や文字コード、タイムゾーンなどを管理する、言うなればシステムの地域設定のことを示しています。
終わりに
まさかインストールパッケージがALバージョンで異なるとは思いませんでした。
EC2上でロケール関連の設定、パッケージインストールはとりあえず実施しておくというケースは多いかと思います。
ただDockerFile側は盲点でした。
この記事が誰かの役に立てば幸いです!