Hotdog adalah seperangkat kait OCI yang digunakan untuk memasukkan Hot Patch Log4j ke dalam wadah.
Saat runc menyiapkan container, ia akan memanggil hotdog-cc-hook
. hotdog-cc-hook
bind-mount file hotpatch ke dalam sistem file container di /dev/shm/.hotdog
. Setelah proses penampung utama dimulai, runc memanggil hotdog-poststart-hook
, yang menggunakan nsenter
untuk memasukkan ruang nama penampung dan menghentikan proses hotdog-hotpatch
. hotdog-hotpatch
dijalankan beberapa kali dengan frekuensi yang menurun (saat ini 1 detik, 5 detik, 10 detik, 30 detik) untuk mendeteksi dan melakukan hotpatch JVM di dalam container.
hotdog-hotpatch
keluar, proses tersebut tidak akan di-hot patch.hotdog-hotpatch
mungkin tetap ada untuk waktu yang singkat setelah kontainer keluar./dev/shm/.hotdog
di dalam wadah. Jika /dev/shm
tidak ada (seperti dalam kasus container Docker yang diluncurkan dengan --ipc=none
), hotdog tidak akan dimasukkan ke dalam container dan tidak akan menyediakan hotpatching. Hotdog disertakan secara default di Bottlerocket 1.5.0.
Hotpatching dapat diaktifkan untuk peluncuran baru Bottlerocket dengan memasukkan pengaturan berikut dalam data pengguna.
[ settings . oci-hooks ]
log4j-hotpatch-enabled = true
Untuk host lama yang menjalankan Bottlerocket versi terbaru, hotpatching dapat diaktifkan menggunakan klien API.
apiclient set oci-hooks.log4j-hotpatch-enabled=true
Mengaktifkan pengaturan saat runtime tidak berpengaruh pada container yang sedang berjalan. Kontainer yang baru diluncurkan akan di-hotpatch.
Untuk menginstal Hotdog, Anda perlu menyalin file berikut ke lokasi yang tepat dan mengatur konfigurasi yang sesuai.
Log4jHotPatch.jar
ke /usr/share/hotdog
(jika Anda membuat hotpatch dari sumber, Anda akan menemukannya di build/libs
)make && sudo make install
untuk menginstal hotdog-cc-hook
dan hotdog-poststart-hook
ke /usr/libexec/hotdog
dan hotdog-hotpatch
ke /usr/share/hotdog
oci-add-hooks
oci-add-hooks
dengan hotdog hooks dengan menulis konten berikut ke /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 "
]
}
}
}
Untuk menjalankan container dengan hotpatching diaktifkan, tentukan docker run --runtime hotdog
. Untuk menjalankan dengan hotpatching yang diaktifkan secara default di semua container, tambahkan konten berikut ke /etc/docker/daemon.json
:
"default-runtime": "hotdog"
Jika Anda ingin tidak ikut serta dalam hotdog
meskipun diaktifkan secara default, tentukan --runtime runc
.
hotdog
akan menambahkan beberapa file ke direktori /dev/shm/.hotdog
di setiap container. Anda dapat menemukan log dari hotdog-hotpatch
di /dev/shm/hotdog.log
.
Lihat KONTRIBUSI untuk informasi lebih lanjut.
Proyek ini dilisensikan di bawah Lisensi Apache-2.0.