Hotdog عبارة عن مجموعة من خطافات OCI المستخدمة لحقن Log4j Hot Patch في الحاويات.
عندما يقوم runc بإعداد الحاوية، فإنه يستدعي hotdog-cc-hook
. يقوم hotdog-cc-hook
bind بتركيب ملفات hotpatch في نظام ملفات الحاوية على /dev/shm/.hotdog
. بعد بدء عملية الحاوية الرئيسية، يستدعي runc hotdog-poststart-hook
، والذي يستخدم nsenter
للدخول إلى مساحات أسماء الحاوية وإيقاف عملية hotdog-hotpatch
. يتم تشغيل hotdog-hotpatch
عدة مرات بتردد متناقص (حاليًا 1 ثانية، 5 ثوانٍ، 10 ثوانٍ، 30 ثانية) لاكتشاف JVMs وتصحيحها داخل الحاوية.
hotdog-hotpatch
، فلن يتم تصحيحها بشكل سريع.hotdog-hotpatch
لفترة قصيرة بعد خروج الحاوية./dev/shm/.hotdog
داخل الحاوية. إذا لم يكن /dev/shm
موجودًا (كما في حالة حاويات Docker التي تم إطلاقها باستخدام --ipc=none
)، فلن يتم حقن hotdog في الحاوية ولن يوفر التصحيح السريع. يتم تضمين Hotdog افتراضيًا في Bottlerocket 1.5.0.
يمكن تمكين Hotpatching لعمليات الإطلاق الجديدة لـ Bottlerocket من خلال تضمين الإعدادات التالية في بيانات المستخدم.
[ settings . oci-hooks ]
log4j-hotpatch-enabled = true
بالنسبة للمضيفين الحاليين الذين يستخدمون أحدث إصدار من Bottlerocket، يمكن تمكين التصحيح السريع باستخدام عميل API.
apiclient set oci-hooks.log4j-hotpatch-enabled=true
تمكين الإعداد في وقت التشغيل ليس له أي تأثير على تشغيل الحاويات. سيتم تصحيح الحاويات التي تم إطلاقها حديثًا.
لتثبيت Hotdog، تحتاج إلى نسخ الملفات التالية إلى الموقع الصحيح وتعيين التكوين المناسب.
Log4jHotPatch.jar
إلى /usr/share/hotdog
(إذا قمت بإنشاء التصحيح السريع من المصدر، فستجده في build/libs
)make && sudo make install
لتثبيت hotdog-cc-hook
و hotdog-poststart-hook
على /usr/libexec/hotdog
و hotdog-hotpatch
على /usr/share/hotdog
oci-add-hooks
oci-add-hooks
باستخدام خطافات hotdog عن طريق كتابة المحتويات التالية إلى /etc/hotdog/config.json
: {
"hooks" : {
"prestart" : [{
"path" : " /usr/libexec/hotdog/hotdog-cc-hook "
}],
"poststart" : [{
"path" : " /usr/libexec/hotdog/hotdog-poststart-hook "
}]
}
}
/etc/docker/daemon.json
: {
"runtimes" : {
"hotdog" : {
"path" : " oci-add-hooks " ,
"runtimeArgs" : [
" --hook-config-path " , " /etc/hotdog/config.json " ,
" --runtime-path " , " /usr/sbin/runc "
]
}
}
}
لتشغيل حاوية مع تمكين التصحيح السريع، حدد docker run --runtime hotdog
. للتشغيل مع تمكين التصحيح السريع افتراضيًا في جميع الحاويات، أضف المحتويات التالية إلى /etc/docker/daemon.json
:
"default-runtime": "hotdog"
إذا كنت ترغب في إلغاء الاشتراك في hotdog
حتى عندما يتم تمكينه افتراضيًا، فحدد --runtime runc
.
سيضيف hotdog
عدة ملفات إلى الدليل /dev/shm/.hotdog
في كل حاوية. يمكنك العثور على السجل من hotdog-hotpatch
في /dev/shm/hotdog.log
.
انظر المساهمة لمزيد من المعلومات.
تم ترخيص هذا المشروع بموجب ترخيص Apache-2.0.