هل هناك أي طريقة لتعيين وقت نظام حاويات عامل الميناء ديناميكيا (في وقت التشغيل) دون التأثير على الجهاز المضيف?
باستخدام
hwclock --set --date "Sat Aug 17 08:31:24 PDT 2016"
يعطي الخطأ التالي:
hwclock: Cannot access the Hardware Clock via any known method.hwclock: Use the --debug option to see the details of our search for an access method.
باستخدام
date -s "2 OCT 2006 18:00:00"
يعطي الخطأ التالي:
date: cannot set date: Operation not permitted
حالة الاستخدام:
أحتاج إلى اختبار برنامج حساس للوقت (يعتمد السلوك على التاريخ).
حالات الاستخدام الشائعة الأخرى:
تشغيل البرامج القديمة مع أخطاء واي 2 كي
اختبار البرمجيات للامتثال العام 2038
تصحيح المشكلات المتعلقة بالوقت ، مثل شهادات طبقة المقابس الآمنة منتهية الصلاحية
تشغيل البرنامج الذي يتوقف عن العمل خارج إطار زمني معين
عمليات البناء الحتمية.
Quinn
April 30, 2022, 9:03pm
#2
فمن الممكن
الحل هو تزييفها في الحاوية. هذا ليب اعتراض جميع برامج استدعاء النظام تستخدم لاسترداد الوقت والتاريخ الحاليين.
التنفيذ سهل. إضافة وظائف إلى دوكيرفيل الخاص بك حسب الاقتضاء:
WORKDIR /RUN git clone https://github.com/wolfcw/libfaketime.gitWORKDIR /libfaketime/srcRUN make install
تذكر تعيين متغيرات البيئة LD_PRELOAD
قبل تشغيل التطبيق الذي تريد الوقت مزورة تطبيقها على.
مثال:
CMD ["/bin/sh", "-c", "LD_PRELOAD=/usr/local/lib/faketime/libfaketime.so.1 FAKETIME_NO_CACHE=1 python /srv/intercept/manage.py runserver 0.0.0.0:3000]
يمكنك الآن تغيير وقت الخوادم ديناميكيا:
مثال:
import osdef set_time(request): print(datetime.today()) os.environ["FAKETIME"] = "2020-01-01" # Note: time of type string must be in the format "YYYY-MM-DD hh:mm:ss" or "+15d" print(datetime.today())
هنا docker-compose
الحل:
أضف /etc/localtime:/etc/localtime:ro
إلى volumes
السمة.
تحقق من هذا الرابط للحصول على مثال.
ابدأ الحاوية بمتغير بيئة إضافي:
docker run -e "SET_CONTAINER_TIMEZONE=true" \ -e "CONTAINER_TIMEZONE=US/Arizona" [docker image name]
في الواقع ، أنا فقط وجدت واختبارها بشكل إيجابي حل باستخدام ليبفاكتيمي
سوف أقوم بتحديث مع إجابة + مثال العمل قريبا.
ماذا سيكون الغرض من القيام بذلك? ما هي حالة استخدامك?