Ubuntu Dockerコンテナーを実行しています。ノルウェー語のキーボードを使用しており、ノルウェー語の文字(øæå)を使用する必要があります。
ターミナルの文字エンコーディングはUTF-8に設定されており、SSHを使用してコンテナに接続しています。ただし、ノルウェー語の文字を入力したり、ノルウェー語の文字をコピーして貼り付けたり、CTL + SHIFT + U + 00f8を使用することはできません。
私は試した:
locale-gen nb_NO.UTF-8
しかし、何も変わっていません。 Dockerコンテナー内でロケールとキーボードを設定するにはどうすればよいですか?
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
これは、そのテーマに関する非常に良い投稿から抽出されます。
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 は私を大いに助けてくれました。
追加するだけ
ENV LANG C.UTF-8
ENV LC_ALL C.UTF-8
dockerfileに。基本的な操作には他に何も必要ありません。一方、locale-gen
は引数を受け入れないため、それを使用する「修正」は機能しません。
私は実際に同じ問題に悩まされていましたが、良いヒントを提供しても、提供された答えはどれも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
コマンドの実行時にLC_ALL
を使用して、LANG
および-e
環境変数を指定します。
docker run -e LANG=C.UTF-8 -e LC_ALL=C.UTF-8 -it --rm <yourimage> <yourcommand>
Dockerfileを変更する必要はありません。
ヒント: 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
@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
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で動作することを確認します。
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
ロケールパッケージのインストール後にロケールをリセットするのではなく、パッケージスクリプトがロケールを正しくセットアップするようにパッケージをインストールする前に、通常尋ねられる質問(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/*