Docker: コンテナのlocaleを設定したい

  • 56
    いいね
  • 1
    コメント
この記事は最終更新日から1年以上が経過しています。

DockerでbuildしたイメージはロケールがPOSFIXになっている。これに起因して、文字コード変換まわりの不具合が発生したりする。

% 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