Wie konfiguriere ich Unicode-Ländereinstellungen in einem Docker Ubuntu 14.04-Container?


30

Ich habe einen Ubuntu Trusty-Container mithilfe von Docker installiert und wenn ich eine Verbindung dazu herstelle, kann ich feststellen, dass das Gebietsschema auf das absolute Minimum festgelegt ist:

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=

Ich muss ein Unicode- Gebietsschema verwenden (z. B. das US-Englische en_US.UTF-8).

Ich habe versucht, die Datei / etc / default / locale zu bearbeiten, und habe Folgendes eingefügt:

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

Aber auch nach dem Verlassen des Containers und der Rückkehr ist das Gebietsschema noch nicht richtig eingestellt.

Ich habe auch versucht, den update-localeBefehl zu verwenden, ohne Erfolg:

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=

In meiner lokalen Konfiguration habe ich die folgende Konfiguration:

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=

Wie kann ich dasselbe in meinem Docker-Container haben?

Danke im Voraus!

Antworten:


19

Die /etc/default/localeDatei wird von PAM geladen. siehe /etc/pam.d/loginzum Beispiel. PAM wird jedoch nicht aufgerufen, wenn ein Befehl in einem Docker-Container ausgeführt wird. Um das Gebietsschema zu konfigurieren, legen Sie einfach die entsprechende Umgebungsvariable in Ihrer Docker-Datei fest. Beispiel:

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

1
Es funktionierte! Danke auch für die Erklärung zu PAM. Am Ende muss ich nur das Image neu erstellen (mithilfe von sudo docker build .) und es funktioniert einwandfrei.
— Pierre

53

Ich benutze dies in meinem 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

Man kann auch den ENVEinzeiler verwenden:

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

2
Das ist die richtige Antwort. locale -azeigt an, dass das Gebietsschema vollständig aus dem Basis-Image entfernt wurde. locale-gengeneriert es erneut und stellt es zur Verfügung.
— Abe Voelker

Wo ist das dockerfile? Kann es für heruntergeladene Bilder bearbeitet werden?
— Mikhail Batcer

@MikhailBatcer Sie können ein Dockerfilein Ihrem Projektverzeichnis erstellen und die FROMDirektive verwenden, um ein vorhandenes Bild zu erweitern. Dann hängen Sie einfach die genannten Zeilen an. Dockerfile
— Erfahren

3
Ich habe den folgenden Fehler: locale-gen: not found. Lösung: stackoverflow.com/a/39761477/1743367
— JustAC0der

7

Versuchen

ENV LANG C.UTF-8

Wenn Sie die unsupported locale settingFehlermeldung erhalten und keine neuen Ländereinstellungen installieren möchten.


Sie können auch vermeiden, das Image für einen einzelnen Lauf neu zu docker-compose run --rm -e TERM=xterm -e LANG=C.UTF-8 worker bash
— erstellen

1

Ich habe es versucht und es hat mir geholfen, Dockerfilenachdem ich mein Bild hinzugefügt habe

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

und Renn

docker-compose build
docker-compose up -d
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.