Docker centos:centos8のロケール等を設定

概要

dockerでcentos:centos8のコンテナを作った時に、日本語ロケールになっていなかったので、設定した。

設定した手順をメモ書きする。

現在のロケール値を確認する

# locale
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_ALL to default locale: No such file or directory
LANG=en_US.UTF-8
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=
# 
# locale -a | grep  ja_JP
#

日本語ロケールが定義されていない。

日本語の言語パックを入れる

glibc-locale-source と glibc-langpack-ja をインストール

# dnf install glibc-locale-source glibc-langpack-ja
~~(省略)~~
#
# locale -a | grep ja_JP
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
ja_JP.eucjp
ja_JP.utf8

ja_JP.eucjp と ja_JP.utf8 が入るようになったが、以前とエラーが出ている。
エラーの原因は、おそらくen_US.utf8 がインストールされていないことを推測。
以下のように対処する。

英語の言語パックを入れる

#  LANG=C dnf install langpacks-en glibc-langpack-en
Last metadata expiration check: 2:17:15 ago on Thu Oct 22 13:03:32 2020.
Package langpacks-en-1.0-12.el8.noarch is already installed.
Dependencies resolved.
========================================================================================
 Package                    Architecture    Version               Repository       Size
========================================================================================
Installing:
 glibc-langpack-en          x86_64          2.28-101.el8          BaseOS          821 k

Transaction Summary
========================================================================================
Install  1 Package

Total download size: 821 k
Installed size: 6.0 M
Is this ok [y/N]: y
Downloading Packages:
glibc-langpack-en-2.28-101.el8.x86_64.rpm               3.6 MB/s | 821 kB     00:00
----------------------------------------------------------------------------------------
Total                                                   993 kB/s | 821 kB     00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                1/1
  Installing       : glibc-langpack-en-2.28-101.el8.x86_64                          1/1
  Running scriptlet: glibc-langpack-en-2.28-101.el8.x86_64                          1/1
  Verifying        : glibc-langpack-en-2.28-101.el8.x86_64                          1/1

Installed:
  glibc-langpack-en-2.28-101.el8.x86_64

Complete!

現在のロケール値を再確認する

# locale
LANG=en_US.UTF-8
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=

これまで出ていたエラーがでなくなったが、英語ロケールになっている。

日本語ロケールに設定

# cat /etc/locale.conf
LANG=ja_JP.UTF-8
# source /etc/locale.conf ← これが重要!
# locale
LANG=ja_JP.UTF-8
LC_CTYPE="ja_JP.UTF-8"
LC_NUMERIC="ja_JP.UTF-8"
LC_TIME="ja_JP.UTF-8"
LC_COLLATE="ja_JP.UTF-8"
LC_MONETARY="ja_JP.UTF-8"
LC_MESSAGES="ja_JP.UTF-8"
LC_PAPER="ja_JP.UTF-8"
LC_NAME="ja_JP.UTF-8"
LC_ADDRESS="ja_JP.UTF-8"
LC_TELEPHONE="ja_JP.UTF-8"
LC_MEASUREMENT="ja_JP.UTF-8"
LC_IDENTIFICATION="ja_JP.UTF-8"
LC_ALL=
#
# echo $LANG
ja_JP.UTF-8
# date
2020年 10月 22日 木曜日 15:28:22 UTC

日本語環境にはなったが、TZが日本になっていない。

日本TZに設定する

# timedatectl set-timezone Asia/Tokyo
# date
2020年 10月 23日 金曜日 00:31:30 JST

ようやくロケールタイムゾーンを正しく設定できた。

参考資料