وقت حاوية عامل الميناء والمنطقة الزمنية (لن تعكس التغييرات)

أين حاويات عامل الميناء الحصول على المعلومات وقتهم? لقد خلق بعض الحاويات من أوبونتو الأساسية:صورة مضمونة ، وعندما تشغيله وطلب 'تاريخ' ، أحصل على الوقت أوتك.

لحظة حصلت حول هذا عن طريق القيام بما يلي في بلدي دوكيرفيل:

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

يجب أن يكون هناك شيء خاطئ في هذا لأنه يبدو من السهل جدا التغاضي عنه... أم أن هذا مقبول?