डॉकटर उबंटू 14.04 कंटेनर में यूनिकोड के लिए स्थानों को कैसे कॉन्फ़िगर करें?


30

मैंने डॉकर का उपयोग करके एक उबंटू ट्रस्टी कंटेनर स्थापित किया है, और जब मैं इसे जोड़ता हूं, तो मैं देख सकता हूं कि लोकेल को नंगे सेट किया गया है:

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=

मुझे एक यूनिकोड लोकेल (उदाहरण के लिए यूएस इंग्लिश वन en_US.UTF-8) का उपयोग करने की आवश्यकता है ।

मैंने / etc / डिफ़ॉल्ट / लोकेल फ़ाइल को संपादित करने और इसे अंदर डालने का प्रयास किया:

# 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=

मैं अपने डॉकटर कंटेनर में समान कैसे रख सकता हूं?

अग्रिम में धन्यवाद!

जवाबों:


19

/etc/default/localeफ़ाइल पीएएम से भरी हुई है; /etc/pam.d/loginउदाहरण के लिए देखें । हालाँकि, डॉक कंटेनर में एक कमांड चलाते समय PAM को लागू नहीं किया जाता है। लोकेल को कॉन्फ़िगर करने के लिए, बस अपने डॉकरफ़ाइल में संबंधित पर्यावरण चर सेट करें। उदाहरण:

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इसे फिर से उत्पन्न करता है और इसे उपलब्ध करता है।
अबे वोल्कर

यह कहां है dockerfile? क्या इसे डाउनलोड की गई छवि के लिए संपादित किया जा सकता है?
मिखाइल बैटसर

@MikhailBatcer आप 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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.