web-dev-qa-db-ja.com

Debian / Ubuntu Dockerコンテナー内でロケールを設定する方法は?

Ubuntu Dockerコンテナーを実行しています。ノルウェー語のキーボードを使用しており、ノルウェー語の文字(øæå)を使用する必要があります。

ターミナルの文字エンコーディングはUTF-8に設定されており、SSHを使用してコンテナに接続しています。ただし、ノルウェー語の文字を入力したり、ノルウェー語の文字をコピーして貼り付けたり、CTL + SHIFT + U + 00f8を使用することはできません。

私は試した:

locale-gen nb_NO.UTF-8

しかし、何も変わっていません。 Dockerコンテナー内でロケールとキーボードを設定するにはどうすればよいですか?

85
mtmacdonald

Dockerfileに適応したものを入れます

# Set the locale
RUN sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen && \
    locale-gen
ENV LANG en_US.UTF-8  
ENV LANGUAGE en_US:en  
ENV LC_ALL en_US.UTF-8     

これは、そのテーマに関する非常に良い投稿から抽出されます。

http://jaredmarkell.com/docker-and-locales/

128
user2915097

Debianを使用する人は、localesパッケージもインストールする必要があります。

RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y locales

RUN sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen && \
    dpkg-reconfigure --frontend=noninteractive locales && \
    update-locale LANG=en_US.UTF-8

ENV LANG en_US.UTF-8 

これ answer は私を大いに助けてくれました。

81
mixel

追加するだけ

ENV LANG C.UTF-8
ENV LC_ALL C.UTF-8

dockerfileに。基本的な操作には他に何も必要ありません。一方、locale-genは引数を受け入れないため、それを使用する「修正」は機能しません。

46
andrewsh

私は実際に同じ問題に悩まされていましたが、良いヒントを提供しても、提供された答えはどれもdebian:latestで100%動作しません。

最大の違いは、両方のlocalesandlocales-allがインストールされていることを確認する必要があることです。後者にはすでにen_US.UTF-8が含まれているため、local-genまたはdpkg-reconfigureで生成する必要はありません。 。

以下は、Dockerfileで機能させるために行ったことです。

FROM debian:latest
RUN apt-get update
RUN apt-get install -y locales locales-all
ENV LC_ALL en_US.UTF-8
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US.UTF-8
21
Jean

コマンドの実行時にLC_ALLを使用して、LANGおよび-e環境変数を指定します。

docker run -e LANG=C.UTF-8 -e LC_ALL=C.UTF-8 -it --rm <yourimage> <yourcommand>

Dockerfileを変更する必要はありません。

14
Dag Høidahl

ヒント: Docker Forum のようなコンテナドキュメントフォーラムを参照します。

debianおよびubuntuの解決策 で、Dockerfileに以下を追加します。

RUN apt-get update && apt-get install -y locales && rm -rf /var/lib/apt/lists/* \
    && localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8
ENV LANG en_US.utf8
3
Eduardo Santana

@Mixelの answer は、Ubuntuベースのdockerイメージに最適です。

ただし、chefを使用してレシピをテストするためのcentosベースのdockerイメージもあります(kitchen-dockerドライバーを使用)。ロケールが設定されていないため、プレインストールするパッケージの1つをインストールできませんでした。ロケールをインストールするために、次を実行する必要がありました。

localedef -c -f UTF-8 -i en_US en_US.UTF-8
export LC_ALL=en_US.UTF-8

この情報は ServerFaultに関するこの回答 から取得しました。

Dockerの一部として上記のコマンドを実行した後、エラーなしでインストールされたパッケージをプロビジョニングします。 .kitchen.ymlから:

platforms:
  - name: centos7
    driver_config:
      image: #(private image)
      platform: centos
      provision_command:
      - localedef -c -f UTF-8 -i en_US en_US.UTF-8
      - export LC_ALL=en_US.UTF-8
1
E. Moffat

Ubuntu/Debianでロケールを設定するのに、これらの複雑なものは必要ありません。 /etc/local.genファイルさえ必要ありません。

単にlocale-genがすべてを行い、作者はlocalesパッケージだけを見逃しました。

RUN apt-get update && apt-get install -y locales && rm -rf /var/lib/apt/lists/* \
 && locale-gen "en_US.UTF-8"
ENV LANG=en_US.UTF-8 \
    LANGUAGE=en_US:en \
    LC_ALL=en_US.UTF-8

これが最も簡単で効果的だと思いました。 Ubuntu 16.04で動作することを確認します。

0
Bumsik Kim

Dockerイメージのユーザーがそれらを変更することを期待していない場合、Docker環境変数を使用することは嫌いです。

1つのRUNのどこかに置くだけです。 UTF-8ロケールが生成されていない場合は、次の一連のコマンドを実行できます。

export DEBIAN_FRONTEND=noninteractive
apt-get update -q -q
apt-get install --yes locales
locale-gen --no-purge en_US.UTF-8
update-locale LANG=en_US.UTF-8
echo locales locales/locales_to_be_generated multiselect en_US.UTF-8 UTF-8 | debconf-set-selections
echo locales locales/default_environment_locale select en_US.UTF-8 | debconf-set-selections
dpkg-reconfigure locales
0
Mitar

ロケールパッケージのインストール後にロケールをリセットするのではなく、パッケージスクリプトがロケールを正しくセットアップするようにパッケージをインストールする前に、通常尋ねられる質問(noninteractiveによって無効にされます)に答えることができます。ロケールを英語(英国、UTF-8):

RUN echo locales locales/default_environment_locale select en_GB.UTF-8 | debconf-set-selections
RUN echo locales locales/locales_to_be_generated select "en_GB.UTF-8 UTF-8" | debconf-set-selections

RUN \
  apt-get update && \
  DEBIAN_FRONTEND=noninteractive apt-get install -y locales && \
  rm -rf /var/lib/apt/lists/*
0
Matthew Buckett