Docker Ubuntu 14.04 kapsayıcısında yerel ayarları Unicode olarak nasıl yapılandırabilirim?


30

Docker kullanarak bir Ubuntu Trusty konteyner yükledim ve bağlandığımda, yerel ayarın en düşük seviyeye ayarlanmış olduğunu görebiliyorum:

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=

Bir Unicode yerel ayarı kullanmam gerekiyor (örneğin ABD İngilizcesi en_US.UTF-8).

/ Etc / default / locale dosyasını düzenlemeye çalıştım ve içine koydum:

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

Ancak, kabı terk ettikten ve geri döndükten sonra bile, yerel ayar hala düzgün bir şekilde ayarlanmamış.

Ayrıca update-localeherhangi bir başarı olmadan komutu kullanmayı da denedim :

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=

Yerel yapılandırmamda aşağıdaki yapılandırmaya sahibim:

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=

Docker kapsayıcımda nasıl aynı olabilir?

Şimdiden teşekkürler!

Yanıtlar:


19

/etc/default/localeDosya PAM tarafından yüklenen; /etc/pam.d/loginörneğin bakınız . Ancak, Docker kapsayıcısında bir komut çalıştırıldığında PAM çağrılmaz. Yerel ayarları yapılandırmak için Dockerfile’inizdeki ilgili ortam değişkenini ayarlamanız yeterli. Örnek:

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

1
İşe yaradı! PAM hakkındaki açıklama için teşekkürler. Sonunda, sadece (kullanarak sudo docker build .) görüntüyü yeniden oluşturmak gerekir ve iyi çalışıyor.
Pierre,

53

Bunu şunu kullanıyorum 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

Biri ENVbir astarı da kullanabilir :

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

2
Bu doğru cevap. locale -ayerel ayarın temel görüntüden tamamen kaldırıldığını gösterir. locale-genonu tekrar üretir ve kullanılabilir duruma getirir.
Abe Voelker

Burası neresi dockerfile? İndirilen resim için düzenlenebilir mi?
Mikhail Batcer

@MikhailBatcer Dockerfile, proje dizininizde bir tane oluşturabilir ve FROMmevcut bir görüntüyü genişletmek için yönergeyi kullanabilirsiniz . Sonra sadece belirtilen satırları ekleyin. Dockerfile Burada
czerasz

3
Aşağıdaki hata var: locale-gen: not found. Çözüm: stackoverflow.com/a/39761477/1743367
JustAC0der

7

Deneyin

ENV LANG C.UTF-8

unsupported locale settingHatayı alırsanız ve herhangi bir yeni yerel ayar yüklemek istemiyorsanız.


Resmi tek bir çalıştırma için yeniden oluşturmaktan da kaçınabilirsiniz: docker-compose run --rm -e TERM=xterm -e LANG=C.UTF-8 worker bash
cmoran92

1

Bunu denedim ve Dockerfileresim ekledikten sonra bana yardımcı oldu

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

ve koş

docker-compose build
docker-compose up -d
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.