web-dev-qa-db-ja.com

Docker Ubuntu 14.04コンテナでロケールをUnicodeに設定する方法は?

Dockerを使用してUbuntu Trustyコンテナーをインストールしました。これに接続すると、ロケールが最小限に設定されていることがわかります。

Sudo docker run -i -t <id> /bin/bash
root@<id>:/# 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=

nicodeロケール(たとえば、米国英語のen_US.UTF-8)を使用する必要があります。

/ etc/default/localeファイルを編集して、これを内部に配置しようとしました:

# cat /etc/default/locale 
LANG=en_US.UTF-8

しかし、コンテナを離れて戻った後でも、ロケールはまだ適切に設定されていません。

また、update-localeコマンドを使用してみましたが、成功しませんでした。

root@cab13a6abe4f:/# update-locale LANG=en_US.UTF-8
root@cab13a6abe4f:/# 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=

ローカル構成では、次の構成があります。

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

Dockerコンテナに同じものを含めるにはどうすればよいですか?

前もって感謝します!

29
Pierre

/etc/default/localeファイルはPAMによってロードされます。たとえば、/etc/pam.d/loginを参照してください。ただし、Dockerコンテナーでコマンドを実行する場合、PAMは呼び出されません。ロケールを設定するには、Dockerfileで関連する環境変数を設定するだけです。例:

FROM ubuntu:trusty
ENV LANG en_US.UTF-8
CMD ["/bin/bash"]
18
Andreas Veithen

Dockerfileでこれを使用します:

# Set the locale
RUN locale-gen en_US.UTF-8  
ENV LANG en_US.UTF-8  
ENV LANGUAGE en_US:en  
ENV LC_ALL en_US.UTF-8

ENVワンライナーも使用できます。

RUN locale-gen en_US.UTF-8
ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en' LC_ALL='en_US.UTF-8'
51
czerasz

試してみる

ENV LANG C.UTF-8

unsupported locale settingエラーが表示され、新しいロケールをインストールしたくない場合。

7
e18r

これを試してみたところ、追加した画像の後にDockerfileで助けてくれました

ENV LANG='en_GB.UTF-8' LANGUAGE='en_GB:en' LC_ALL='en_GB.UTF-8'
RUN echo en_GB.UTF-8 UTF-8 >> /etc/locale.gen && locale-gen

そして走る

docker-compose build
docker-compose up -d
0
Jogi