Come configurare le localizzazioni su Unicode in un contenitore Docker Ubuntu 14.04?


30

Ho installato un contenitore Ubuntu Trusty usando Docker e quando mi collego ad esso, vedo che la locale è impostata al minimo indispensabile:

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=

Devo usare una localizzazione Unicode (ad esempio quella inglese americana en_US.UTF-8).

Ho provato a modificare il file / etc / default / locale e ho inserito questo:

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

Ma anche dopo aver lasciato il contenitore e tornare indietro, le impostazioni internazionali non sono ancora impostate correttamente.

Ho anche provato a usare il update-localecomando, senza successo:

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=

Nella mia configurazione locale, ho la seguente configurazione:

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=

Come posso avere lo stesso nel mio contenitore Docker?

Grazie in anticipo!

Risposte:


19

Il /etc/default/localefile viene caricato da PAM; vedi /etc/pam.d/loginper esempio. Tuttavia, PAM non viene richiamato quando si esegue un comando in un contenitore Docker. Per configurare le impostazioni internazionali, è sufficiente impostare la variabile di ambiente pertinente nel file Docker. Esempio:

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

1
Ha funzionato! Grazie anche per la spiegazione su PAM. Alla fine, ho solo bisogno di ricostruire l'immagine (usando sudo docker build .) e funziona benissimo.
Pierre,

53

Lo uso nel mio 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

Si può anche usare il 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
Questa è la risposta corretta locale -amostra che la locale è stata completamente rimossa dall'immagine di base. locale-genlo genera di nuovo e lo rende disponibile.
Abe Voelker,

Dov'è questo dockerfile? Può essere modificato per l'immagine scaricata?
Mikhail Batcer,

@MikhailBatcer è possibile creare un Dockerfilenella directory del progetto e utilizzare la FROMdirettiva per estendere un'immagine esistente. Quindi aggiungi solo le righe menzionate. Scopri di più sul Dockerfile qui
czerasz,

3
Ho ottenuto il seguente errore: locale-gen: not found. Soluzione: stackoverflow.com/a/39761477/1743367
JustAC0der

7

Provare

ENV LANG C.UTF-8

Se viene visualizzato l' unsupported locale settingerrore e non si desidera installare nuove impostazioni locali.


Puoi anche evitare di ricostruire l'immagine per una singola corsa: docker-compose run --rm -e TERM=xterm -e LANG=C.UTF-8 worker bash
cmoran92

1

L'ho provato e mi ha aiutato Dockerfiledopo aver aggiunto l'immagine

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

e corri

docker-compose build
docker-compose up -d
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.