KDOC 76: コンテナでLocaleを設定する

この文書のステータス

  • 作成
    • 2024-02-07 貴島
  • レビュー
    • 2024-02-08 貴島

概要

コンテナでLocaleを設定する方法をまとめる。普段ホストマシンとして動かしているLinuxでは設定されているので問題になることはないが、Dockerコンテナでは設定されていないので問題になることがある。たとえばファイル名に日本語が含まれるときに英語のままだと検索にかからなかったりする。

イントロ

Localeとは「その地域で使われる言語や通貨の単位などのまとまり」1のことである。

localectl
| System                        | Locale: | LANG=en_US.UTF-8 |
| LC_NUMERIC=ja_JP.UTF-8        |         |                  |
| LC_MONETARY=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 |         |                  |
| VC                            | Keymap: | n/a              |
| X11                           | Layout: | jp               |
| X11                           | Model:  | pc105            |

手順

手順は2段階である。Docker環境は公式のubuntuイメージで確認した。

  1. 言語パックをインストールする
  2. 環境変数を設定する

まず、インストール前に確認する。

locale -a
C
C.utf8
POSIX

このとき、日本語ファイルを表示すると文字化けする。

apt update
apt install language-pack-ja
locale -a
C
C.utf8
POSIX
ja_JP.utf8

Localeは環境変数で設定できるので、コマンド実行時にexportするか、DockerfileのEnvに記載する。以下はコマンド実行時にexportする例。

export LC_ALL=ja_JP.UTF-8

Locale前後でファイル名の日本語が正しく表示できるのを確認する。設定前はバイト列が見えている。

# 設定前
touch あ
ls
# => ''$'\343\201\202'

# ================
# ...
# ================

# 設定後
ls
# => あ

Footnotes: