วิธีการกำหนดค่าตำแหน่งที่ตั้งเป็น Unicode ในคอนเทนเนอร์ Docker Ubuntu 14.04


30

ฉันติดตั้ง Ubuntu Trusty container โดยใช้ Docker และเมื่อฉันเชื่อมต่อกับมันฉันจะเห็นว่า locale นั้นถูกตั้งค่าไว้ที่ค่าต่ำสุด:

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=

ฉันจำเป็นต้องใช้โลแคลUnicode (ตัวอย่างเช่นภาษาอังกฤษแบบสหรัฐอเมริกาen_US.UTF-8)

ฉันพยายามแก้ไขไฟล์ / etc / default / locale และวางไว้ด้านใน:

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

แต่แม้หลังจากออกจากตู้คอนเทนเนอร์และกลับมาสถานที่ดังกล่าวยังไม่ถูกตั้งค่าอย่างเหมาะสม

ฉันยังลองใช้update-localeคำสั่งโดยไม่ประสบความสำเร็จ:

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=

ในการกำหนดค่าท้องถิ่นของฉันฉันมีการกำหนดค่าต่อไปนี้:

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 ของฉันได้อย่างไร

ขอบคุณล่วงหน้า!

คำตอบ:


19

/etc/default/localeไฟล์โหลดโดย PAM; ดู/etc/pam.d/loginตัวอย่าง อย่างไรก็ตาม PAM จะไม่ถูกเรียกใช้เมื่อเรียกใช้คำสั่งในคอนเทนเนอร์ Docker หากต้องการกำหนดค่าภาษาให้ตั้งค่าตัวแปรสภาพแวดล้อมที่เกี่ยวข้องใน Dockerfile ของคุณ ตัวอย่าง:

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

1
มันได้ผล! ขอบคุณสำหรับคำอธิบายเกี่ยวกับ PAM เช่นกัน ในที่สุดฉันก็ต้องสร้างภาพใหม่ (ใช้sudo docker build .) และทำงานได้ดี
ปิแอร์

53

ฉันใช้สิ่งนี้ใน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

หนึ่งสามารถใช้ENVหนึ่งซับ:

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

2
นี่คือคำตอบที่ถูกต้อง locale -aแสดงให้เห็นว่าสถานที่ถูกลบออกจากภาพฐานทั้งหมด locale-genสร้างขึ้นอีกครั้งและทำให้พร้อมใช้งาน
Abe Voelker

ไหนนี้คือdockerfile? สามารถแก้ไขสำหรับภาพที่ดาวน์โหลดได้หรือไม่
Mikhail Batcer

@MailailBatcer คุณสามารถสร้างDockerfileในไดเรกทอรีโครงการของคุณและใช้FROMคำสั่งเพื่อขยายภาพที่มีอยู่ จากนั้นเพียงต่อท้ายบรรทัดที่กล่าวถึง ค้นหาเพิ่มเติมเกี่ยวกับที่Dockerfile นี่
czerasz

3
ฉันได้รับข้อผิดพลาดดังต่อไปนี้: locale-gen: not found. การแก้ไข: stackoverflow.com/a/39761477/1743367
JustAC0der

7

ลอง

ENV LANG C.UTF-8

หากคุณได้รับunsupported locale settingข้อผิดพลาดและไม่ต้องการติดตั้งตำแหน่งที่ตั้งใหม่


นอกจากนี้คุณยังสามารถหลีกเลี่ยงการสร้างภาพขึ้นใหม่สำหรับการทำงานครั้งเดียว: docker-compose run --rm -e TERM=xterm -e LANG=C.UTF-8 worker bash
cmoran92

1

ฉันลองสิ่งนี้และมันช่วยฉันDockerfileหลังจากที่ภาพที่ฉันเพิ่ม

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

และเรียกใช้

docker-compose build
docker-compose up -d
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.