डॉकर कंटेनरों को उनके समय की जानकारी कहां से मिलती है? मैंने मूल उबंटू से कुछ कंटेनर बनाए हैं:भरोसेमंद छवि, और जब मैं इसे चलाता हूं और 'दिनांक' का अनुरोध करता हूं, तो मुझे यूटीसी समय मिलता है ।
थोड़ी देर के लिए मैं अपने डॉकरफाइल में निम्नलिखित करके इसके आसपास हो गया:
RUN sudo echo "America/Los_Angeles" > /etc/timezone
हालांकि, किसी कारण से काम करना बंद कर दिया । ऑनलाइन खोज मैंने नीचे सुझाए गए को देखा:
docker run -v /etc/timezone:/etc/timezone [image-name]
इन दोनों विधियों ने हालांकि समय क्षेत्र को सही ढंग से सेट किया है!
$ cat /etc/timezoneAmerica/Los_Angeles$ dateTue Apr 14 23:46:51 UTC 2015
यहाँ रहस्य यह है कि dpkg-reconfigure tzdata बस बनाता है /etc/localtime एक प्रतिलिपि के रूप में, हार्डलिंक या सिम्लिंक (एक सिम्लिंक पसंद किया जाता है) एक फ़ाइल में /usr/share/zoneinfo. तो यह पूरी तरह से आपके डॉकरफाइल से करना संभव है । विचार करें:
यह सही नहीं है क्योंकि यह तब काम नहीं करता है जब सॉफ़्टवेयर को फ़ाइल के बजाय आवश्यकता होती है /etc/timezone सेट किया जाना है । इस तरह आप इसे डिफ़ॉल्ट मान के रूप में छोड़ रहे हैं etc/UTC.
मैंने निर्धारित किया है कि वास्तव में डॉकर कंटेनर के अंदर समय क्षेत्र निर्धारित करने का कोई मूर्खतापूर्ण सुरुचिपूर्ण तरीका नहीं है । तो अंत में इस समाधान पर बस गए हैं:
# Set timezone as specified in /config/etc/timezonedpkg-reconfigure -f noninteractive tzdata
डेटा वॉल्यूम /config डॉकरफाइल, एक विशिष्ट देश या क्षेत्र के लिए स्थानीयकृत:
# Set the time zoneRUN echo "Europe/London" > /config/etc/timezone
... यह सुरुचिपूर्ण नहीं है क्योंकि इसमें 3 अलग-अलग फाइलें शामिल हैं, और फिर से बनाना /etc/localtime प्रत्येक रनटाइम कंटेनर प्रारंभ पर। जो बल्कि बेकार है ।
हालाँकि यह ठीक से काम करता है, और बेस ऐप इमेज और प्रत्येक प्रति-देश स्थानीयकृत कॉन्फ़िगरेशन के बीच सफलतापूर्वक अलगाव प्राप्त करता है । कोड की 3 लाइनों में ।
फेडोरा कंटेनर का उपयोग करना (उबंटू के साथ भी काम करने की संभावना):
मैंने पाया कि सबसे सरल समाधान डॉकर-कंपोज़ में निम्नलिखित का उपयोग करना था । yml
environment: TZ: "${TZ:-America/Los_Angeles}"
फिर अपने में । एनवी फ़ाइल (जो डॉकर-कंपोज़ स्वचालित रूप से पढ़ता है)
TZ=America/Los_Angeles
यह आपको डॉकर-कंपोज़ डालने की अनुमति देता है । संस्करण नियंत्रण के तहत वाईएमएल और एक अनुकूलित का उपयोग करें । एनवी फ़ाइल जिसे गिट द्वारा अनदेखा किया जा सकता है ।
आपको कंटेनर के लिए एक डिफ़ॉल्ट मान मिलता है और आपको अनुकूलन मिलता है, दोनों दुनिया के सर्वश्रेष्ठ ।
फेडोरा के लिए कोई अन्य परिवर्तन आवश्यक नहीं थे, यह सिर्फ काम करता है!
इस मुद्दे की जानकारी और लिंक के लिए वॉनक को धन्यवाद । यह इस तरह के एक जटिल गड़बड़ की तरह लगता है, इसलिए मैंने अपने विचार पर कुछ परीक्षण किया कि इसे कैसे हल किया जाए और यह बहुत अच्छा काम करता है ।
>docker run -it ubuntu:trusty /bin/bash#dpkg-reconfigure tzdata
(मेरा टाइमज़ोन चुनने के लिए संकेतों का पालन करें)
>docker commit [container-id] chocko/ubuntu:local
फिर मैंने इसे प्रतिबिंबित करने के लिए अपने डॉकरफाइल्स को अपडेट किया:
FROM chocko/ubuntu:local
इसमें कुछ गड़बड़ होनी चाहिए क्योंकि इसे अनदेखा करना बहुत आसान लगता है । .. या यह स्वीकार्य है?