読者です 読者をやめる 読者になる 読者になる

CentOS Dockerコンテナの日本語ロケール設定方法

開発部の高橋です。

今回はCentOSのDockerコンテナで日本語ロケール設定方法について紹介します。

CentOSでのロケール設定方法

以下Dockerfileのサンプルです。

FROM centos:centos7

RUN rm -f /etc/rpm/macros.image-language-conf && \
    sed -i '/^override_install_langs=/d' /etc/yum.conf && \
    yum -y reinstall glibc-common && \
    yum clean all

ENV LANG="ja_JP.UTF-8" \
    LANGUAGE="ja_JP:ja" \
    LC_ALL="ja_JP.UTF-8"

CMD bash

補足

これまでは以下の様なDockerfileでもロケールの設定ができていたのですが、Bug 1392855 – build-locale-archive: build-locale-archive.c:301: fill_archive: Assertion `used < head->namehash_used' failed.で報告されている不具合によって、去年末頃からロケールの設定ができなくなっています。

FROM centos:centos7

RUN yum -y update && \
    yum -y reinstall glibc-common && \
    yum clean all

ENV LANG="ja_JP.UTF-8" \
    LANGUAGE="ja_JP:ja" \
    LC_ALL="ja_JP.UTF-8"

CMD bash
# コンテナ内でlocale -aを実行してもCロケールとPOSIXロケール以外が存在しない。コマンド実行する度にwarningログが出力される。
$ locale -a
/bin/sh: warning: setlocale: LC_ALL: cannot change locale (ja_JP.UTF-8)
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_COLLATE to default locale: No such file or directory
C
POSIX

そのため、glibc-commonを再インストールする前にrm -f /etc/rpm/macros.image-language-confsed -i '/^override_install_langs=/d' /etc/yum.confを実行することで不具合を回避しています。