सवाल डॉकर कंटेनर समय और टाइमज़ोन (परिवर्तनों को प्रतिबिंबित नहीं करेगा)


डॉकर कंटेनर को अपनी समय की जानकारी कहां मिलती है? मैंने बुनियादी उबंटू से कुछ कंटेनर बनाए हैं: भरोसेमंद छवि, और जब मैं इसे चलाता हूं और 'तारीख' का अनुरोध करता हूं, तो मुझे यूटीसी समय मिलता है।

थोड़ी देर के लिए मैं अपने डॉकरफाइल में निम्नलिखित करके इसे प्राप्त कर लिया:

RUN sudo echo "America/Los_Angeles" > /etc/timezone

हालांकि, किसी कारण से काम करना बंद कर दिया। ऑनलाइन खोजना मैंने नीचे दिए गए सुझाव को देखा:

docker run -v /etc/timezone:/etc/timezone [image-name]

इन दोनों विधियों को सही ढंग से टाइमज़ोन सेट करें!

$ cat /etc/timezone
America/Los_Angeles
$ date
Tue Apr 14 23:46:51 UTC 2015

किसी को पता है क्या देता है?


73
2018-04-14 23:49


मूल


यदि तुम प्रयोग करते हो Alpine, आपको स्थापित करने की आवश्यकता है tzdata सबसे पहले, यहां देखें github.com/gliderlabs/docker-alpine/issues/136 - Belter


जवाब:


यहां रहस्य है कि dpkg-reconfigure tzdata बस बनाता है /etc/localtime एक प्रतिलिपि के रूप में, हार्डलिंक या सिम्लिंक (एक सिम्लिंक को प्राथमिकता दी जाती है) में /usr/share/zoneinfo। तो यह पूरी तरह से अपने डॉकरफाइल से करना संभव है। विचार करें:

ENV TZ=America/Los_Angeles
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

और एक बोनस के रूप में, टीजेड भी कंटेनर में सही ढंग से सेट किया जाएगा।

यह वितरण-अज्ञेयवादी भी है, इसलिए यह किसी भी लिनक्स के साथ काम करता है।

नोट: यदि आप अल्पाइन आधारित छवि का उपयोग कर रहे हैं तो आपको इसे इंस्टॉल करना होगा tzdata प्रथम। (इस मुद्दे को देखें यहाँ)

इस तरह दिखता है:

RUN apk add --no-cache tzdata
ENV TZ America/Los_Angeles

124
2018-04-17 19:55



टीजेड नामों की सूची: en.wikipedia.org/wiki/List_of_tz_database_time_zones - BillyTom
उबंटू के साथ: 16.04 (और शायद अन्य संस्करण) आपको होना चाहिए tzdata इस काम को बनाने के लिए पैकेज स्थापित किया गया। - Opsse


आम तौर पर यह डॉकर कंटेनर में पर्यावरण चर सेट करने के लिए पर्याप्त है, जैसे:

docker run -e TZ=Europe/Amsterdam debian:jessie date

बेशक यह भी साथ काम करेगा docker-compose


30
2018-01-13 22:15



यह सबसे सुंदर तरीका प्रतीत होता है। ध्यान रखें कि कुछ आधार छवि, जैसे ubuntu:16.04, पास नहीं है tzdata पैकेज जो डॉकरफाइल में जोड़ा जाना चाहिए। - Julien Fastré
+1 - मैं जूलियन से सहमत हूं; रनटाइम पर समय क्षेत्र सेट करने के लिए यह सबसे सुरुचिपूर्ण दृष्टिकोण प्रतीत होता है। यह CentOS के साथ अच्छी तरह से काम करता है। अल्पाइन छवि को 'tzdata' पैकेज की स्थापना की आवश्यकता होती है, जिसे बिल्ड समय पर हार्कोकिंग कॉन्फ़िगरेशन पर प्राथमिकता दी जाती है जब तक अतिरिक्त 3 एमबी छवि पेलोड बर्दाश्त नहीं किया जा सकता :) - Frelling


बढ़ते /etc/localtime छवि में, तो यह सिंक में है host -v सबसे लोकप्रिय है।

लेकिन देखो 12084 अंक:

यह सही नहीं है क्योंकि सॉफ़्टवेयर की बजाय फ़ाइल की आवश्यकता होने पर यह काम नहीं करता है /etc/timezone सेट किया जानेवाला।
  इस तरह आप इसे डिफ़ॉल्ट मान के रूप में पत्तियों का उपयोग कर रहे हैं etc/UTC

मैंने यह निर्धारित किया है कि वास्तव में डॉकर कंटेनर के अंदर समय क्षेत्र सेट करने के लिए कोई मूर्खतापूर्ण सुरुचिपूर्ण तरीका नहीं है।
  तो आखिर में इस समाधान पर बस गए हैं:

ऐप डॉकरफाइल:

# Relocate the timezone file
RUN mkdir -p /config/etc && mv /etc/timezone /config/etc/ && ln -s /config/etc/timezone /etc/

ऐप एंट्रीपॉइंट स्क्रिप्ट:

# Set timezone as specified in /config/etc/timezone
dpkg-reconfigure -f noninteractive tzdata

डेटा वॉल्यूम /config डॉकरफाइल, एक विशिष्ट देश या क्षेत्र में स्थानीयकृत:

# Set the time zone
RUN echo "Europe/London" > /config/etc/timezone

... यह सुरुचिपूर्ण नहीं है क्योंकि 3 अलग-अलग फाइलें शामिल हैं, और फिर से बना रही हैं /etc/localtime प्रत्येक रनटाइम कंटेनर पर शुरू होता है। जो बदनामी है।

हालांकि यह सही ढंग से काम करता है, और आधार ऐप छवि और प्रत्येक प्रति-देश स्थानीयकृत कॉन्फ़िगरेशन के बीच सफलतापूर्वक अलगाव प्राप्त करता है।
  कोड की 3 पंक्तियों में।


16
2018-04-15 06:14



मेरे लिए, यह था: RUN echo "Europe/London" > /etc/timezone - jpmottin
@jpmottin तो थोड़ा सा अंदर serverfault.com/a/856593/783 फिर? - VonC


आप अपने डॉकर-कंटेनर में वॉल्यूम के रूप में अपनी स्थानीय फाइलें (/ etc / timezone और / etc / localtime) जोड़ सकते हैं।

अपना अपडेट करें docker-compose.yml निम्नलिखित पंक्तियों के साथ।

volumes:
    - "/etc/timezone:/etc/timezone:ro"
    - "/etc/localtime:/etc/localtime:ro"

अब कंटेनर समय आपके मेजबान जैसा ही है


10
2018-06-08 15:55



यदि आपके CentOS distrib होस्ट पर कमांड दर्ज करें echo "Europe/Paris" > /etc/timezone कंटेनर को पुनरारंभ करने से पहले। - CrazyMax
क्या यह मैकोज़ होस्ट पर काम करता है? - Redsandro
मैक में काम नहीं करता है - Marcello de Sales
यह मैकोज़ पर काम करता था लेकिन मैंने इसे लंबे समय बाद फिर से कोशिश की और मुझे निम्नलिखित मिलते हैं। सुनिश्चित नहीं है कि उच्च सिएरा या डॉकर परिवर्तन के कारण यह हुआ: "डॉकर: डिमन से त्रुटि प्रतिक्रिया: माउंट्स इनकार कर दिया गया: पथ / आदि / लोकलटाइम ओएस एक्स से साझा नहीं किया गया है और डॉकर को ज्ञात नहीं है। आप डॉकर से साझा पथ कॉन्फ़िगर कर सकते हैं - > प्राथमिकताएं ... -> फ़ाइल साझा करना। देखें docs.docker.com/docker-for-mac/osxfs/#namespaces अधिक जानकारी के लिए।" - gae123
यह आपके zininfo डीबी को दूषित कर देगा / etc / localtime एक सिम्लिंक है (इस प्रकार / usr / share / zoneinfo / कुछ / चीज कंटेनर के अंदर / usr / share / zoneinfo / UTC के रूप में आरोहित होने की संभावना है)। उल्लेख नहीं है कि आप मेजबान से डीबी फ़ाइल को कंटेनर में एक के साथ मिश्रित करेंगे। - ionelmc


उबंटू 16.04 छवि में बग है। समाधान था

    ENV TZ 'Europe/Tallinn'
    RUN echo $TZ > /etc/timezone && \
    apt-get update && apt-get install -y tzdata && \
    rm /etc/localtime && \
    ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && \
    dpkg-reconfigure -f noninteractive tzdata && \
    apt-get clean

8
2018-06-19 10:12



गंभीरता से ... यह एकमात्र समाधान है जो काम करता है! - Gerrat
यह भी करना था - ऐसा लगता है कि डिफ़ॉल्ट रूप से tzdata कुछ distros में नहीं है। - Peter


यदि आप डॉकर छवि का उपयोग कर रहे हैं ubuntu :

# Change the docker default timezone from UTC to SGT
echo "Asia/Singapore" > /etc/timezone
dpkg-reconfigure tzdata
date

3
2017-07-16 03:37





इस मुद्दे के बारे में जानकारी और लिंक के लिए VonC के लिए धन्यवाद। ऐसा लगता है कि इस तरह के एक गड़बड़ की गड़बड़ी की तरह, इसलिए मैंने अपने स्वयं के विचार पर कुछ परीक्षण किया कि इसे कैसे हल किया जाए और ऐसा लगता है कि यह बहुत अच्छा काम करता है।

>docker run -it ubuntu:trusty /bin/bash
#dpkg-reconfigure tzdata

(मेरे टाइमज़ोन का चयन करने के लिए संकेतों का पालन करें)

>docker commit [container-id] chocko/ubuntu:local

फिर मैंने इसे प्रदर्शित करने के लिए अपने डॉकफाइल अपडेट किए:

FROM chocko/ubuntu:local

इसमें कुछ गड़बड़ होना चाहिए क्योंकि इसे अनदेखा करना बहुत आसान लगता है ... या यह स्वीकार्य है?


2
2018-04-15 19:10



यह भी मैंने कोशिश की, लेकिन टाइमज़ोन फिर भी मेरे बाद खुद को रीसेट करता है exit बर्तन। यह डेबियन पर है। - Mike Chamberlain
@ माइककैम्बरलेन क्या आपने उपरोक्त माइकल हैम्पटन द्वारा स्वीकृत उत्तर का प्रयास किया था? मैंने इसे स्वयं लागू नहीं किया है, लेकिन मुझे लगता है कि इसे प्राप्त किए गए अपवॉट्स पर विचार करने का तरीका है। - Chockomonkey