物理のバス停 by salt22g

とある物理学見習いの備忘録。

Docker locale設定のerrror

Docker image作成時に起きたlocaleに関するerrorを解決しました。
ググっても「Ubuntuの日本語化」に記事ばかりで遠回りになってしまい、しばらくうまく行きませんでした。
最終的に解決法がわかったのでこの記事に書いておきます。

環境

hostOS: macOS & ubuntu(どちらでも同じ症状)
Docker version: 19.03.8
元にしたDocker image: ubuntu:18.04(公式)
hub.docker.com

症状

# docker run -it hogehoge
manpath: can't set the locale; make sure $LC_* and $LANG are correct
bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)

使っている分には影響はなかったがなんか気持ち悪い。
調べてみるとlocale(言語設定)の問題らしい。

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

正しく設定できていないとのこと。
使えるlocaleを確認すると…

# locale -a
C
C.UTF-8
POSIX

え…デフォルトに英語ないの??!…公式imageなのに…

解決法1

Dockerfikeに以下の記述を追加

# locale
RUN apt-get update
RUN apt-get install -y locales
RUN locale-gen en_US.UTF-8

これでen_US.UTF-8の環境が構築されるのでerrorが消える。

解決法2

コンテナ内で以下のコマンドを叩く

# apt-get update
# apt-get install -y locales
# locale-gen en_US.UTF-8

これで起動時のerrorも消えてスッキリしました。
↓解決後

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

# locale -a
C
C.UTF-8
en_US.utf8
POSIX

ちゃんと追加されてますね。