DockerでbuildしたイメージはロケールがPOSIXになっている。これに起因して、文字コード変換まわりの不具合が発生したりする。
% locale
LANG=
LANGUAGE=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=
よくあるLinuxのTipsとして /etc/default/locale
をセットすればデフォルトのロケールを変更できるが、docker runしただけではこのファイルが読み込まれないらしくDockerでは通用しない。
dotcloud/dockerのissueでもこれについての質問があったが、中の人の回答ではENVとして設定すればいいとのこと。
そしてこれがDockerfileに書く設定
RUN locale-gen en_US.UTF-8
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
※この設定はUbuntuで効果があるとのことなので、CentOSはこの方法でやってみてください
これでdocker buildすればデフォルトのロケールが変更される。
% locale
LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=en_US.UTF-8