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


30

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=

Unicodeロケール(たとえば、米国英語のロケール)を使用する必要があります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コンテナに同じものを含めるにはどうすればよいですか?

前もって感謝します!

回答:


19

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

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

1
出来た!PAMについての説明もありがとう。最後に、イメージを再構築するだけで(を使用sudo docker build .)、正常に機能します。
ピエール

53

私はこれを私の中で使用します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'

2
これは正解です。locale -aは、ロケールがベースイメージから完全に削除されたことを示しています。locale-gen再度生成し、利用可能にします。
安倍Voelker

これはどこdockerfile?ダウンロードした画像用に編集できますか?
ミハイルバッサー

@MikhailBatcerをDockerfileプロジェクトディレクトリに作成し、FROMディレクティブを使用して既存のイメージを拡張できます。次に、上記の行を追加します。詳細についてはDockerfile こちらをご覧ください
czerasz

3
次のエラーが表示されました:locale-gen: not found。解決策:stackoverflow.com/a/39761477/1743367
JustAC0der

7

試して

ENV LANG C.UTF-8

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


また、1つの実行のための画像を再構築避けることができます: docker-compose run --rm -e TERM=xterm -e LANG=C.UTF-8 worker bash
cmoran92

1

私はこれを試してみまし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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.