Comment configurer les locales en Unicode dans un conteneur Docker Ubuntu 14.04?


30

J'ai installé un conteneur Ubuntu Trusty à l'aide de Docker, et lorsque je me connecte à celui-ci, je peux voir que les paramètres régionaux sont définis au strict minimum:

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=

J'ai besoin d'utiliser un environnement local Unicode (par exemple, l'anglais américain en_US.UTF-8).

J'ai essayé de modifier le fichier / etc / default / locale et de le mettre à l'intérieur:

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

Mais même après avoir quitté le conteneur et revenir, les paramètres régionaux ne sont toujours pas correctement définis.

J'ai également essayé d'utiliser la update-localecommande, sans succès:

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=

Sur ma configuration locale, j'ai la configuration suivante:

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=

Comment puis-je avoir la même chose dans mon conteneur Docker?

Merci d'avance!

Réponses:


19

Le /etc/default/localefichier est chargé par PAM; voir /etc/pam.d/loginpar exemple. Cependant, PAM n'est pas appelé lors de l'exécution d'une commande dans un conteneur Docker. Pour configurer les paramètres régionaux, définissez simplement la variable d'environnement appropriée dans votre Dockerfile. Exemple:

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

1
Ça a marché! Merci aussi pour l'explication sur PAM. En fin de compte, j'ai juste besoin de reconstruire l'image (en utilisant sudo docker build .) et cela fonctionne bien.
Pierre

53

J'utilise ceci dans mon 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

On peut également utiliser le ENVone-liner:

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

2
C'est la bonne réponse. locale -aindique que les paramètres régionaux ont été entièrement supprimés de l'image de base. locale-genle génère à nouveau et le rend disponible.
Abe Voelker

Où est-ce dockerfile? Peut-il être modifié pour l'image téléchargée?
Mikhail Batcer

@MikhailBatcer, vous pouvez créer un Dockerfiledans votre répertoire de projet et utiliser la FROMdirective pour étendre une image existante. Ensuite, ajoutez simplement les lignes mentionnées. En savoir plus sur Dockerfile ici
czerasz

3
Je suis l'erreur suivante: locale-gen: not found. Solution: stackoverflow.com/a/39761477/1743367
JustAC0der

7

Essayer

ENV LANG C.UTF-8

Si vous obtenez l' unsupported locale settingerreur et ne souhaitez pas installer de nouveaux paramètres régionaux.


Vous pouvez également éviter de reconstruire l'image pour une seule exécution: docker-compose run --rm -e TERM=xterm -e LANG=C.UTF-8 worker bash
cmoran92

1

J'ai essayé cela et cela m'a aidé Dockerfileaprès mon image, j'ajoute

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

et courir

docker-compose build
docker-compose up -d
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.