Bagaimana cara mengkonfigurasi locales ke Unicode di wadah Docker Ubuntu 14.04?

30

Saya menginstal wadah Ubuntu Trusty menggunakan Docker, dan ketika saya terhubung dengannya, saya bisa melihat bahwa lokal diatur ke 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=

Saya perlu menggunakan lokal Unicode (misalnya bahasa Inggris AS, en_US.UTF-8).

Saya mencoba mengedit file / etc / default / locale dan memasukkannya ke dalam:

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

Tetapi bahkan setelah meninggalkan wadah dan kembali, lokal masih belum diatur dengan benar.

Saya juga mencoba menggunakan update-localeperintah, tanpa hasil:

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=

Pada konfigurasi lokal saya, saya memiliki konfigurasi berikut:

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=

Bagaimana saya bisa memiliki yang sama di wadah Docker saya?

Terima kasih sebelumnya!

Pierre
sumber

Jawaban:

19

The /etc/default/localefile dimuat oleh PAM; lihat /etc/pam.d/loginmisalnya. Namun, PAM tidak dipanggil saat menjalankan perintah dalam wadah Docker. Untuk mengonfigurasi lokal, cukup setel variabel lingkungan yang relevan di Dockerfile Anda. Contoh:

FROM ubuntu:trusty
ENV LANG en_US.UTF-8
CMD ["/bin/bash"]
Andreas Veithen
sumber
1
Berhasil! Terima kasih atas penjelasannya tentang PAM juga. Pada akhirnya, saya hanya perlu membangun kembali gambar (menggunakan sudo docker build .) dan berfungsi dengan baik.
Pierre
53

Saya menggunakan ini di 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

Satu juga dapat menggunakan ENVsatu-liner:

RUN locale-gen en_US.UTF-8
ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en' LC_ALL='en_US.UTF-8'
Czerasz
sumber
2
Ini jawaban yang benar. locale -amenunjukkan bahwa lokal telah sepenuhnya dihapus dari gambar dasar. locale-genmenghasilkan lagi dan membuatnya tersedia.
Abe Voelker
Dimana ini dockerfile? Bisakah itu diedit untuk gambar yang diunduh?
Mikhail Batcer
@MikhailBatcer Anda dapat membuat Dockerfiledi direktori proyek Anda dan menggunakan FROMarahan untuk memperluas gambar yang ada. Kemudian tambahkan saja baris yang disebutkan. Temukan lebih lanjut tentang Dockerfile di sini
czerasz
3
Saya mendapat error berikut: locale-gen: not found. Solusi: stackoverflow.com/a/39761477/1743367
JustAC0der
7

Mencoba

ENV LANG C.UTF-8

Jika Anda mendapatkan unsupported locale settingkesalahan dan tidak ingin menginstal lokal baru.

e18r
sumber
Anda juga dapat menghindari membangun kembali gambar untuk sekali jalankan: docker-compose run --rm -e TERM=xterm -e LANG=C.UTF-8 worker bash
cmoran92
1

Saya mencoba ini dan itu membantu saya Dockerfilesetelah gambar saya tambahkan

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

dan lari

docker-compose build
docker-compose up -d
Jogi
sumber