げっとシステムログ

WEB開発メモ

docker の ubuntu イメージで日本語が入力できない件

docker hub の ubuntu は日本語環境ないよ

結論として、 docker hub の ubuntu には日本語環境入ってないから日本語使うには language-pack 入れないといけない
どうやら centos とかでも同じだった模様

症状としてはこんな感じ

coreos $ docker run --rm -it ubuntu:14.04 bash
root # 日本語
root # \! . 2to3-3.4 \: MAKEDEV \[ \[\[ ]] a2p add-shell addgroup addpart adduser agetty ...

↑ はちょっとわかりにくいけど、「日本語」という文字を送った時点で何かずらずらと表示される
ENTER は押してない

他の文字だと、単に消える、とか

雰囲気としてはコントロールシークエンスとして処理されている感じ

グーグル先生によると --show-control-chars で日本語が表示されるよ!っていう記事がちらほらあるけどそうじゃないよね

locale を見てみると、

root # 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=

locale が怪しい?
とりあえず日本語に設定してみる

root # export LC_ALL=ja_JP.UTF-8
bash: warning: setlocale: LC_ALL: cannot change locale (ja_JP.UTF-8): No such file or directory

ロケールがないようである
・・・日本語環境がない、のか?

brokendish.org

この記事を見ると language-pack を入れないといけないようである

root # apt-get install language-pack-ja-base language-pack-ja

これやって locale の設定したら日本語が入力できるようになった

最初は ssh の問題かと思っていた

これ、 ssh から接続していたので、 LC_* の環境変数はローカルから引き継がれていた
このため、 locale の表示は最初から ja_JP.UTF-8 だった
しかし、日本語環境がないため、単に設定だけ ja_JP.UTF-8 になっていただけで、日本語の入力はできない状態だった

locale の設定も同じなのになんでだーーーってなったけど、ふと docker run で直接入ってみたら同じ症状が出た
それまで ssh が問題だと思ってたが実際は日本語環境がないためだったわけ