ডকার কনটেইনার সময় এবং সময় অঞ্চল (পরিবর্তনগুলি প্রতিফলিত করবে না)

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

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

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. সুতরাং আপনার ডকারফিল থেকে এটি সম্পূর্ণরূপে করা সম্ভব বিবেচনা করুন:

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

এবং বোনাস হিসাবে, টিজেড কন্টেইনারে সঠিকভাবে সেট করা হবে.

এটি ডিস্ট্রিবিউশন-অজ্ঞেয়বাদী, তাই এটি প্রায় কাছাকাছি কোনো লিনাক্স সঙ্গে কাজ করে.

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

এই মত দেখায়:

RUN apk add --no-cache tzdataENV TZ America/Los_Angeles

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

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

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

আপনি আপনার ডকার-কন্টেইনারে ভলিউম হিসাবে আপনার স্থানীয় ফাইল (/ইত্যাদি/সময় অঞ্চল এবং /ইত্যাদি/স্থানীয় সময়) যোগ করতে পারেন.

আপনার আপডেট করুন docker-compose.yml নিম্নলিখিত লাইন দিয়ে

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

এখন ধারক সময় আপনার হোস্ট হিসাবে একই

মাউন্ট /etc/localtime ছবিতে, তাই এটি সিঙ্ক হয় host -v সবচেয়ে জনপ্রিয় এক.

কিন্তু দেখুন ইস্যু 12084:

সফ্টওয়্যার পরিবর্তে ফাইল প্রয়োজন যখন এটি কাজ করে না, কারণ এটা সঠিক নয় /etc/timezone সেট করা.
এইভাবে আপনি এটি ডিফল্ট মান হিসাবে ছেড়ে দেয় etc/UTC.

আমি আসলে একটি ডকার ধারক ভিতরে সময় অঞ্চল সেট করার কোন অব্যর্থ মার্জিত উপায় আছে যে নির্ধারিত আছে.
সুতরাং অবশেষে এই সমাধান উপর নিষ্পত্তি হয়েছে:

অ্যাপ ডকারফিল:

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

অ্যাপ্লিকেশন এন্ট্রি পয়েন্ট স্ক্রিপ্ট:

# 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 লাইন

উবুন্টু 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

এখানে আমার দুই সেন্ট যোগ করার পদ্ধতি, আমি এই বিভিন্ন চেষ্টা করেছি, কারণ কিন্তু কেউ আলপাইন ভিত্তিক ইমেজ কাজ.

যাইহোক, এই কৌতুক করেনি:

ENV TZ=America/TorontoRUN apk updateRUN apk upgradeRUN apk add ca-certificates && update-ca-certificatesRUN apk add --update tzdataRUN rm -rf /var/cache/apk/*

[উৎস]

আলপাইন বেসিক চিত্রটিতে (উদাহরণস্বরূপ নোড ব্যবহার করুন: 10.16.0-আলপাইন):

ডকারফিল

FROM node:10.16.0-alpineENV TZ=America/Los_AngelesRUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezoneWORKDIR /appCOPY package.json package-lock.json ./RUN npm i --productionCOPY . .CMD node index.js

ফেডোরা কনটেইনার ব্যবহার করে (উবুন্টুর সাথেও কাজ করার সম্ভাবনা রয়েছে):

আমি পাওয়া সবচেয়ে সহজ সমাধান ডকার-রচনা নিম্নলিখিত ব্যবহার ছিল.ওয়াইএমএল

environment:   TZ: "${TZ:-America/Los_Angeles}"

তারপর আপনার মধ্যে .এনভি ফাইল (যা ডকার-রচনা স্বয়ংক্রিয়ভাবে পড়ে)

TZ=America/Los_Angeles

এটি আপনাকে ডকার-রচনা করতে দেয়সংস্করণ নিয়ন্ত্রণে ওয়াইএমএল এবং একটি কাস্টমাইজড ব্যবহার .এনভি ফাইল যা গিট দ্বারা উপেক্ষা করা যেতে পারে

আপনি ধারক জন্য একটি ডিফল্ট মান পেতে এবং আপনি উভয় বোথ ওয়ার্ল্ডস শ্রেষ্ঠ, স্বনির্ধারণ পেতে.

ফেডোরার জন্য অন্য কোনও পরিবর্তন প্রয়োজন ছিল না, এটি কেবল কাজ করে!

আপনি যদি এর উপর ভিত্তি করে ডকার চিত্র ব্যবহার করেন ubuntu :

# Change the docker default timezone from UTC to SGTecho "Asia/Singapore" > /etc/timezonedpkg-reconfigure tzdatadate

তথ্য এবং সমস্যার লিঙ্কের জন্য ভিওএনসি ধন্যবাদ. এই যেমন একটি সংবর্ত জগাখিচুড়ি মত মনে হয়, তাই আমি এই সমাধান কিভাবে আমার নিজের ধারণা কিছু পরীক্ষার করেনি এবং এটা মহান কাজ বলে মনে হয়.

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

(আমার সময় অঞ্চল নির্বাচন করার অনুরোধ জানানো অনুসরণ করুন)

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

তারপরে আমি এটি প্রতিফলিত করার জন্য আমার ডকারফিলগুলি আপডেট করেছি:

FROM chocko/ubuntu:local

এটা পরিচয় করা খুব সহজ বলে মনে হয়, কারণ এই সঙ্গে কিছু ভুল হতে হবে... নাকি এটি গ্রহণযোগ্য?