Hotdog — это набор перехватчиков OCI, используемых для внедрения горячего патча Log4j в контейнеры.
Когда runc настраивает контейнер, он вызывает hotdog-cc-hook
. hotdog-cc-hook
привязка монтирует файлы исправлений в файловую систему контейнера в /dev/shm/.hotdog
. После запуска основного процесса контейнера runc вызывает hotdog-poststart-hook
, который использует nsenter
для входа в пространства имен контейнера и запускает процесс hotdog-hotpatch
. hotdog-hotpatch
запускается несколько раз с уменьшающейся частотой (в настоящее время 1, 5, 10, 30 с) для обнаружения и исправления JVM внутри контейнера.
hotdog-hotpatch
, они не будут подвергнуты горячему исправлению.hotdog-hotpatch
может оставаться в течение короткого времени после выхода из контейнера./dev/shm/.hotdog
внутри контейнера. Если /dev/shm
не существует (например, в случае с контейнерами Docker, запущенными с --ipc=none
), hotdog не будет внедрен в контейнер и не будет обеспечивать горячее исправление. Хот-дог включен по умолчанию в Bottlerocket 1.5.0.
Горячее исправление можно включить для новых запусков 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
с помощью хот-догов, записав следующее содержимое в /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.