প্রশ্ন ডকার কনটেইনার সময় এবং টাইমজোন (পরিবর্তন প্রতিফলিত হবে না)


ডকার কনটেইনার তাদের সময় তথ্য পেতে কোথায়? আমি মৌলিক উবুন্টু থেকে কিছু পাত্রে তৈরি করেছি: বিশ্বস্ত ছবি, এবং যখন আমি এটি চালা এবং 'তারিখ' অনুরোধ করি, তখন আমি UTC সময় পাই।

কিছুক্ষণের জন্য আমি আমার ডকারফাইলে নিম্নলিখিতটি করে এই চারপাশে এসেছি:

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

কেউ কি জানেন?


76
2018-04-14 23:49


উত্স


আপনি ব্যবহার করেন Alpine, আপনি ইনস্টল করতে হবে tzdata প্রথম, এখানে দেখুন github.com/gliderlabs/docker-alpine/issues/136 - Belter


উত্তর:


এখানে গোপন যে dpkg-reconfigure tzdata সহজভাবে তৈরি করে /etc/localtime একটি অনুলিপি হিসাবে, হার্ডলিঙ্ক বা সিমলিঙ্ক (একটি সিমলিংক পছন্দ করা হয়) একটি ফাইলের মধ্যে /usr/share/zoneinfo। তাই এটি সম্পূর্ণরূপে আপনার Dockerfile থেকে করা সম্ভব। বিবেচনা:

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

এবং একটি বোনাস হিসাবে, TZ এছাড়াও কনটেইনারে সঠিকভাবে সেট করা হবে।

এটিও বিতরণ-অদ্ভুত, তাই এটি বেশিরভাগই কোনও লিনাক্সের সাথে কাজ করে।

দ্রষ্টব্য: যদি আপনি আলপাইন ভিত্তিক চিত্র ব্যবহার করেন তবে আপনাকে এটি ইনস্টল করতে হবে tzdata প্রথম। (এই সমস্যা দেখুন এখানে)

এটা এমন দেখতে:

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

127
2018-04-17 19:55



TZ নামগুলির তালিকা: en.wikipedia.org/wiki/List_of_tz_database_time_zones - BillyTom
উবুন্টুর সাথে: 16.04 (এবং হয়ত অন্যান্য সংস্করণ) আপনার থাকতে হবে tzdata প্যাকেজ ইনস্টল এই কাজ করতে। - Opsse
আমি কি কেবলমাত্র মনে করি যে এটি ডক্কারফিলের টাইমজোন হার্ডকোডের জন্য খুব স্মার্ট নয়? - Wolfgang
@ ওলফগ্যাং এটি একটি উদাহরণ। আপনি সাধারণভাবে পরিবেশগত ভেরিয়েবল সরবরাহ করতে পারেন এমন কোনও উপায়ে এটি সরবরাহ করতে পারেন, যেমন কমান্ড লাইন, docker-compose.yml ইত্যাদি। - Michael Hampton♦


সাধারণত এটি ডকার কন্টেইনারে পরিবেশ পরিবর্তনশীল সেট করার জন্য যথেষ্ট:

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

অবশ্যই এই সঙ্গে কাজ করবে docker-compose


32
2018-01-13 22:15



এটি সবচেয়ে মার্জিত উপায় বলে মনে হচ্ছে। কিছু বেস ইমেজ, যেমন যত্ন নিন ubuntu:16.04, আছে না tzdata প্যাকেজ যা ডকারফিল যুক্ত করা উচিত। - Julien Fastré
+1 - আমি জুলিয়ানের সাথে একমত; এই রানটাইম সময় সময় অঞ্চল সেট করার জন্য সবচেয়ে মার্জিত পদ্ধতির প্রদর্শিত হবে। এটি CentOS সঙ্গে ভাল কাজ করে। অ্যালপিন চিত্রটির জন্য 'tzdata' প্যাকেজ ইনস্টলেশনের প্রয়োজন হয়, যা বিল্ড সময় সময়ে হারকোডিং কনফিগারেশনের চেয়ে বেশি পছন্দ না হওয়া পর্যন্ত অতিরিক্ত 3MB চিত্র পেলোড সহ্য করা যাবে না :) - 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 dockerfile, একটি নির্দিষ্ট দেশ বা অঞ্চলে স্থানান্তরিত:

# 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 / টাইমজোন এবং / ইত্যাদি / স্থানীয় সময়) আপনার ডকার-ধারক মধ্যে ভলিউম হিসাবে যোগ করতে পারেন।

আপনার আপডেট করুন 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
এই MacOS হোস্ট কাজ করে? - Redsandro
MAC কাজ করে না - Marcello de Sales
এটি MacOS এ কাজ করতে ব্যবহৃত হয়েছিল তবে আমি এটি দীর্ঘক্ষণ পরে আবার চেষ্টা করেছিলাম এবং আমি নিম্নলিখিতটি পেয়েছি। হাই সিয়েরা বা ডকার পরিবর্তন এই কারণে ঘটেছে: "ডকার: ডেমন থেকে ত্রুটির প্রতিক্রিয়া: মাউন্টগুলি অস্বীকার করা হয়েছে: পথ / ইত্যাদি / স্থানীয় সময়টি OS X থেকে ভাগ করা হয় না এবং ডকারে পরিচিত নয়। আপনি ডকার থেকে ভাগ করা পাথগুলি কনফিগার করতে পারেন। > পছন্দসমূহ ... -> ফাইল শেয়ারিং দেখুন docs.docker.com/docker-for-mac/osxfs/#namespaces আরও তথ্যের জন্য." - gae123
এটি আপনার zoneinfo db কে / etc / localtime একটি সিমলিংক হিসাবে দূষিত করবে (এইভাবে / usr / share / zoneinfo / কিছু / Thing কনটেইনারের ভিতরে / 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
এছাড়াও এটি করতে হয়েছিল - মনে হচ্ছে টিজডটা ডিফল্টভাবে কিছু ডিস্ট্রোতে নেই। - 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


এখানে আমার দুটি সেন্ট যোগ করা হয়েছে, কারণ আমি এইগুলির বেশ কয়েকটি চেষ্টা করেছি কিন্তু অ্যালাইন-ভিত্তিক চিত্রগুলিতে কেউ কাজ করেনি।

যাইহোক, এই কৌশল ছিল:

ENV TZ=America/Toronto
RUN apk update
RUN apk upgrade
RUN apk add ca-certificates && update-ca-certificates
RUN apk add --update tzdata
RUN rm -rf /var/cache/apk/*

[সূত্র]


1
2018-04-25 01:05





টাইমজোন সেট করতে আরো জেনেরিক উপায় docker run আর্গুমেন্ট:

-e TZ=`ls -la /etc/localtime | cut -d/ -f8-9`

অথবা পুনঃব্যবহারের জন্য:

function GET_TZ () {
    ls -la /etc/localtime | cut -d/ -f8-9
}

...
-e TZ=`GET_TZ`

0
2017-08-08 09:03