কীভাবে কোনও ডেবিয়ান / উবুন্টু ডকারের ধারকের ভিতরে লোকাল সেট করবেন?


124

আমি একটি উবুন্টু ডকারের ধারক চালাচ্ছি। আমার একটি নরওয়েজিয়ান কীবোর্ড রয়েছে এবং নরওয়েজিয়ান অক্ষর (øæå) ব্যবহার করা দরকার।

আমার টার্মিনাল চরিত্রের এনকোডিংটি ইউটিএফ -8 এ সেট করা হয়েছে এবং আমি এসএসএইচ ব্যবহার করে আমার ধারকটির সাথে সংযুক্ত। তবে আমি নরওয়েজিয়ান অক্ষরগুলি টাইপ করতে, নরওয়েজিয়ান অক্ষরগুলিকে অনুলিপি করতে বা আটকানোতে, বা সিটিএল + শিফট + ইউ + 00f8 ব্যবহার করতে অক্ষম।

আমি চেষ্টা করেছিলাম:

locale-gen nb_NO.UTF-8

কিন্তু কিছুই পরিবর্তন হয়নি। আমি কীভাবে ডকারের ধারকটির মধ্যে লোকেল এবং কীবোর্ড সেট করব?

উত্তর:


172

আপনার ডকফাইফিল থেকে কিছু রূপান্তরিত করে

# Set the locale
RUN sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen && \
    locale-gen
ENV LANG en_US.UTF-8  
ENV LANGUAGE en_US:en  
ENV LC_ALL en_US.UTF-8     

এটি সেই বিষয়ে খুব ভাল পোস্ট থেকে নেওয়া হয়েছে from

http://jaredmarkell.com/docker-and-locales/


1
আপনি যখন ডেবিয়ান ব্যবহার করেন তখন এটি কাজ করে না: বেস কন্টেইনার হিসাবে জেসি
আইডেক্সার

22
আপনার apt-get -y install localesউবুন্টু ব্যবহার করার সময়
ব্যবহারকারী 2915097

2
মারাত্মক ফাইল ত্রুটি না পাওয়া এড়াতে আমাকে RUN touch /usr/share/locale/locale.aliasকল করার আগে যোগ করতে locale-genহয়েছিল
পল কেইস্টার

6
sedস্ক্রিপ্ট কদাকার ধরনের। s/# \(en_US\.UTF-8 .*\)/\1/অনুসন্ধান বাক্যাংশটি এটি ক্যাপচার করে প্রতিস্থাপনের স্ট্রিংয়ে পুনরাবৃত্তি করা এড়াতে চেষ্টা করুন ।
ট্রিপলি

3
আপনি যদি অতিরিক্ত স্তর তৈরি করা এড়াতে চান তবে আপনি লিখতে পারেনENV LANG=en_US.UTF-8 \ LANGUAGE=en_US \ LC_ALL=en_US.UTF-8
আন্দ্রে রাভাজি

100

যারা দেবিয়ান ব্যবহার করেন তাদেরও localesপ্যাকেজ ইনস্টল করতে হবে ।

RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y locales

RUN sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen && \
    dpkg-reconfigure --frontend=noninteractive locales && \
    update-locale LANG=en_US.UTF-8

ENV LANG en_US.UTF-8 

এই উত্তরটি আমাকে অনেক সাহায্য করেছিল।


63

শুধু যোগ কর

ENV LANG C.UTF-8
ENV LC_ALL C.UTF-8

আপনার ডকফাইলে (আপনার localesপ্যাকেজটি ইনস্টল করা আছে কিনা তা নিশ্চিত করার দরকার হতে পারে )) বেসিক ক্রিয়াকলাপের জন্য অন্য কোনও কিছুর প্রয়োজন নেই। এদিকে, উবুন্টুর বাইরে, locale-genকোনও যুক্তি গ্রহণ করে না, এ কারণেই এটি কোনও 'ফিক্স' ব্যবহার করে না যেমন ডিবিয়ান নিয়ে। উবুন্টু patched আছে locale-genজেনারেট করতে লোকেল একটি তালিকা গ্রহণ করতে কিন্তু মুহূর্তে প্যাচ কোথাও এর ডেবিয়ান গ্রহণযোগ্য হয় নি।


1
উবুন্টু ছবিতে আমার পক্ষে কাজ হয়নি। এই উত্তর যদিও কাজ করে।
ডায়ালেক্স

4
আপনি দয়া করে কোনও বিবরণ দিতে পারেন? C.UTF-8কিছু ইনস্টল করার প্রয়োজন ছাড়াই সমস্ত সিস্টেমে উপলব্ধ এবং এটি বেশিরভাগ পর্যায়ে থাকা উচিত ।
অ্যান্ড্রুশ

ডকার উবুন্টু: 18.04 চিত্রের সাথে কাজ করে। আমার কেবল "ল্যাং" দরকার ছিল। আমারও ইনস্টল করার দরকার localesপড়েনি।
উইসবাকি

1
আপনি শুধুমাত্র রানটাইম এ সেট করতে চান, আপনি স্থির করতে পারে env মধ্যে Vars docker runকমান্ড args পরিবর্তে: stackoverflow.com/questions/28405902/...
wisbucky

1
উবুন্টুতে, আপনাকে সেগুলি ইনস্টল করতে হবেapt-get install -y locales
জেরার্ডিকো

27

আমি আসলে একই সমস্যায় ভুগতে পেরেছি, তবে প্রদত্ত উত্তরের কোনওটিই 100% ডেবিয়ান নিয়ে কাজ করছে না: সর্বশেষ, যদিও তারা ভাল ইঙ্গিত দেয়।

সবচেয়ে বড় পার্থক্য হ'ল আপনার অবশ্যই নিশ্চিত হওয়া উচিত যে লোকেল এবং লোকেলগুলি সমস্তই ইনস্টল করা আছে, এটি ইতিমধ্যে en_US.UTF-8 রয়েছে, সুতরাং আপনাকে এটিকে স্থানীয়-জেন বা ডিপি কেজি-পুনরায় কনফিগার করতে হবে না

এটিকে কাজ করার জন্য আমি আমার ডকফাইলে যা করেছি তা এখানে:

FROM debian:latest
RUN apt-get update
RUN apt-get install -y locales locales-all
ENV LC_ALL en_US.UTF-8
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US.UTF-8

2
সমস্ত প্যাকেজের লোকেলগুলির বিবরণ রয়েছে: এই প্যাকেজটিতে সমস্ত সমর্থিত লোকেলের জন্য পূর্বনির্ধারিত লোকেল ডেটা রয়েছে। আরও ভাল বিকল্প হ'ল লোকেল প্যাকেজ ইনস্টল করা এবং কেবলমাত্র পছন্দসই লোকেল নির্বাচন করা, তবে এটি একটি লো-মেমরির মেশিনে কার্যকর হতে পারে কারণ কিছু লোকেল ফাইল সংকলন করতে অনেক মেমরি নেয়।
ব্যবহারকারী2707671

ই: প্যাকেজ '
লোকেলস

@ আস্ট্রসার্গ: আপনি যে ত্রুটি পেয়েছেন তা আমি খুব আশ্চর্য হয়েছি। এর আউটপুট কি apt-cache show locales-all? এটি অবশ্যই একটি সরকারী প্যাকেজ এবং দেবিয়ান এ উপলব্ধ।
জিন

@ জিন রুট @ শেয়ার: / # অ্যাপটি-ক্যাশে শো লোকাল-সমস্ত; বিড়াল / ইত্যাদি / ইস্যু এন: শুদ্ধভাবে ভার্চুয়াল হওয়ায় প্যাকেজ 'লোকেলস অল' থেকে সংস্করণগুলি নির্বাচন করতে পারে না: কোনও প্যাকেজ পাওয়া যায় নি উবুন্টু 18.04.1 এলটিএস \ n \ l
অ্যাস্ট্রসার্গ

@ আস্ট্রসার্গ: আমি উবুন্টুর পক্ষে আসলেই জানি না যেহেতু আমি চেষ্টা করেছি যে কেবল ডিবিয়ানের জন্যই (FROM ডেবিয়ান থেকে দেখুন: আমি সরবরাহিত ডকফেরফিল স্নিপেটে সর্বশেষ)।
জিন

19

আপনার কমান্ডটি চালনার সময় LANGএবং LC_ALLপরিবেশের ভেরিয়েবলগুলি উল্লেখ করুন -e:

docker run -e LANG=C.UTF-8 -e LC_ALL=C.UTF-8 -it --rm <yourimage> <yourcommand>

ডকফাইফাইলটি সংশোধন করার প্রয়োজন নেই।


2
-eআর্গুমেন্ট, এছাড়াও Docker-রচনা সঙ্গে কাজ উপায় দ্বারা।
দাগ হিডাহল

5
এটি কাজ করে কারণ বেশিরভাগ ডিস্ট্রোজে C.UTF-8লোকেলের অন্তর্ভুক্ত থাকে । এগুলিতে সাধারণত ভাষা নির্দিষ্ট লোকেল অন্তর্ভুক্ত থাকে না (উদাঃ en_US.UTF-8)। তার জন্য আপনার ওটি ইনস্টল locales-all(বড়) বা ইনস্টল localesএবং শেষ locale-genহওয়ার পরে চালানো দরকার /etc/locale.gen
জোনাথন রাইনহার্ট

5

টিপ: ডকার ফোরামের মতো ধারক ডকুমেন্টেশন ফোরামগুলি ব্রাউজ করুন ।

ডেবিয়ান এবং উবুন্টুর জন্য এখানে একটি সমাধান রয়েছে , আপনার ডকফাইফিলের সাথে নিম্নলিখিতগুলি যুক্ত করুন:

RUN apt-get update && apt-get install -y locales && rm -rf /var/lib/apt/lists/* \
    && localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8
ENV LANG en_US.UTF-8

3

উবুন্টু / ডেবিয়ানে লোকাল সেট করার জন্য আপনার ছেলেরা সেই জটিল জিনিসগুলির প্রয়োজন নেই। আপনারও দরকার নেই/etc/local.gen ফাইলের ।

কেবল locale-genসবকিছুই করবেন এবং লেখক কেবল localesপ্যাকেজটি মিস করেছেন ।

RUN apt-get update && apt-get install -y locales && rm -rf /var/lib/apt/lists/* \
 && locale-gen "en_US.UTF-8"
ENV LANG=en_US.UTF-8 \
    LANGUAGE=en_US:en \
    LC_ALL=en_US.UTF-8

আমি এটিকে সবচেয়ে সহজ এবং কার্যকর বলে মনে করেছি। আমি নিশ্চিত এটি উবুন্টু 16.04 এ কাজ করে।


2

@ মিক্সেলের উত্তর আমাদের কাছে উবুন্টু-ভিত্তিক ডকার চিত্রের জন্য দুর্দান্ত কাজ করেছে।

তবে, শেফ ( kitchen-dockerড্রাইভার ব্যবহার করে ) রেসিপি পরীক্ষার জন্য আমাদের কাছে সেন্টো-ভিত্তিক ডকার চিত্রও রয়েছে । আমাদের পূর্ব-ইনস্টল করা প্যাকেজগুলির মধ্যে একটি লোকেল সেট না হওয়ার কারণে ইনস্টল করতে ব্যর্থ হয়েছিল। লোকেল ইনস্টল করার জন্য আমাকে নিম্নলিখিতগুলি চালাতে হয়েছিল:

localedef -c -f UTF-8 -i en_US en_US.UTF-8
export LC_ALL=en_US.UTF-8

সার্ভারফল্টে এই উত্তরটি থেকে আমি এই তথ্যটি পেয়েছি

উপরের কমান্ডগুলি চালনার পরে ডকারের অংশ হিসাবে কোনও ত্রুটি ছাড়াই প্যাকেজটি ইনস্টল করার ব্যবস্থা করে। থেকে .kitchen.yml:

platforms:
  - name: centos7
    driver_config:
      image: #(private image)
      platform: centos
      provision_command:
      - localedef -c -f UTF-8 -i en_US en_US.UTF-8
      - export LC_ALL=en_US.UTF-8

1

আমি ডকার পরিবেশের ভেরিয়েবলগুলি অপছন্দ করি যখন আমি কোনও ডকার চিত্রের ব্যবহারকারী তাদের পরিবর্তন করার প্রত্যাশা করি না।

একে একে কোথাও রেখে দিন RUN। আপনার যদি ইউটিএফ -8 লোকেল উত্পন্ন না হয় তবে আপনি নিম্নলিখিত কমান্ডের সেটটি করতে পারেন:

export DEBIAN_FRONTEND=noninteractive
apt-get update -q -q
apt-get install --yes locales
locale-gen --no-purge en_US.UTF-8
update-locale LANG=en_US.UTF-8
echo locales locales/locales_to_be_generated multiselect en_US.UTF-8 UTF-8 | debconf-set-selections
echo locales locales/default_environment_locale select en_US.UTF-8 | debconf-set-selections
dpkg-reconfigure locales

এটি এখানে একমাত্র বুদ্ধিমান উত্তর বলে মনে হয়েছিল কারণ এটি পরিবেশের ভেরিয়েবলগুলির সাথে স্ক্রু করা এড়ায়। যাইহোক, এটা কাজ করে না. localeপরবর্তী কমান্ডগুলি কার্যকর করার সময়, বা পরবর্তী RUNব্লকগুলি কার্যকর করার সময় বা বর্তমান চিত্রটিকে বেস হিসাবে ব্যবহার করার সময় আউটপুট পরিবর্তন করা হয় না । আসলে এই পরিবর্তনগুলি প্রয়োগ করতে কিছু অতিরিক্ত পদক্ষেপ নেওয়া প্রয়োজন?
ব্যবহারকারীর 7860670

উপরের কমান্ডগুলি হ'ল আপনি কীভাবে সেগুলি হারিয়ে ফেলছেন তা আপনি কীভাবে তৈরি করবেন। আপনি যদি সেগুলি ব্যবহার করতে চান তবে আপনাকে এটিকে পরিবেশ পরিবর্তনশীল হিসাবে সেট করতে হবে। বা, যেমন আমি সরাসরি এই উত্তরটি কেবল রুনের অভ্যন্তরে প্রস্তাব করছি বা ডকারের ENVমতো করে সেট করে ENV LC_ALL=en_US.UTF-8
মিতর

-1

প্যাকেজ noninteractiveইনস্টল করার আগে লোকেল প্যাকেজটি ইনস্টল করার পরে লোকেলটি পুনরায় সেট করার পরিবর্তে আপনি প্যাকেজ ইনস্টল করার আগে সাধারণত জিজ্ঞাসিত প্রশ্নগুলির উত্তর দিতে পারেন (যা দ্বারা অক্ষম করা হয় ) যাতে প্যাকেজ স্ক্রিপ্টগুলি স্থানীয়ভাবে সঠিকভাবে সেটআপ করে, উদাহরণস্বরূপ লোকালটি ইংরেজিতে সেট করে ( ব্রিটিশ, ইউটিএফ -8):

RUN echo locales locales/default_environment_locale select en_GB.UTF-8 | debconf-set-selections
RUN echo locales locales/locales_to_be_generated select "en_GB.UTF-8 UTF-8" | debconf-set-selections

RUN \
  apt-get update && \
  DEBIAN_FRONTEND=noninteractive apt-get install -y locales && \
  rm -rf /var/lib/apt/lists/*

-1

আমার জন্য উবুন্টু ছবিতে কী কাজ করেছে :

FROM ubuntu:xenial
USER root
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update && apt-get install --no-install-recommends -y locales && rm -rf /var/lib/apt/lists/*
RUN echo "LC_ALL=en_US.UTF-8" >> /etc/environment
RUN echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen
RUN echo "LANG=en_US.UTF-8" > /etc/locale.conf

-1

আমি এটি (পরে RUN apt-get install -y python3) ব্যবহার করেছি :

RUN apt-get install -y locales
RUN apt-get install -y language-pack-en
ENV LANG en_US.UTF-8 
ENV LANGUAGE en_US:en 
ENV LC_ALL en_US.UTF-8
RUN python3 -c "print('UTF8 works nice! 👌')"

এবং এটি UTF8 works nice! 👌সঠিকভাবে প্রিন্ট করে ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.