Làm cách nào để định cấu hình định vị thành Unicode trong bộ chứa Docker Ubuntu 14.04?


30

Tôi đã cài đặt bộ chứa Ubuntu Trusty bằng Docker và khi tôi kết nối với nó, tôi có thể thấy rằng miền địa phương được đặt ở mức tối thiểu:

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=

Tôi cần sử dụng ngôn ngữ Unicode (ví dụ: tiếng Anh Mỹ en_US.UTF-8).

Tôi đã cố gắng chỉnh sửa tập tin / etc / default / locale và đặt nó vào bên trong:

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

Nhưng ngay cả sau khi rời khỏi container và quay trở lại, miền địa phương vẫn không được đặt đúng.

Tôi cũng đã thử sử dụng update-localelệnh, nhưng không thành công:

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=

Về cấu hình cục bộ của tôi, tôi có cấu hình sau:

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=

Làm thế nào tôi có thể có cùng trong container Docker của tôi?

Cảm ơn trước!

Câu trả lời:


19

Các /etc/default/localetập tin được tải bởi PAM; xem /etc/pam.d/loginví dụ. Tuy nhiên, PAM không được gọi khi chạy lệnh trong bộ chứa Docker. Để định cấu hình miền địa phương, chỉ cần đặt biến môi trường có liên quan trong Dockerfile của bạn. Thí dụ:

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

1
Nó đã làm việc! Cảm ơn đã giải thích về PAM là tốt. Cuối cùng, tôi chỉ cần xây dựng lại hình ảnh (sử dụng sudo docker build .) và nó hoạt động tốt.
Pierre

53

Tôi sử dụng cái này trong 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

Người ta cũng có thể sử dụng ENVmột lớp lót:

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

2
Đây là câu trả lời chính xác. locale -acho thấy miền địa phương đã bị xóa hoàn toàn khỏi hình ảnh cơ sở. locale-gentạo ra nó một lần nữa và làm cho nó có sẵn.
Abe Voelker

Đây là dockerfileđâu Nó có thể được chỉnh sửa cho hình ảnh tải về?
Mikhail Batcer

@MikhailBatcer bạn có thể tạo một Dockerfiletrong thư mục dự án của bạn và sử dụng FROMchỉ thị để mở rộng hình ảnh hiện có. Sau đó chỉ cần nối các dòng đã đề cập. Tìm hiểu thêm về Dockerfile đây
czerasz

3
Tôi đã nhận được lỗi sau : locale-gen: not found. Giải pháp: stackoverflow.com/a/39761477/1743367
JustAC0der

7

Thử

ENV LANG C.UTF-8

Nếu bạn gặp unsupported locale settinglỗi và không muốn cài đặt bất kỳ ngôn ngữ mới nào.


Bạn cũng có thể tránh xây dựng lại hình ảnh trong một lần chạy: docker-compose run --rm -e TERM=xterm -e LANG=C.UTF-8 worker bash
cmoran92

1

Tôi đã thử điều này và nó đã giúp tôi Dockerfilesau khi hình ảnh của tôi tôi thêm

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

và chạy

docker-compose build
docker-compose up -d
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.