Hotdog es un conjunto de ganchos OCI que se utilizan para inyectar Log4j Hot Patch en contenedores.
Cuando runc configura el contenedor, invoca hotdog-cc-hook
. hotdog-cc-hook
enlaza-monta los archivos hotpatch en el sistema de archivos del contenedor en /dev/shm/.hotdog
. Después de que se inicia el proceso del contenedor principal, runc invoca hotdog-poststart-hook
, que usa nsenter
para ingresar a los espacios de nombres del contenedor y bifurcar un proceso hotdog-hotpatch
. hotdog-hotpatch
se ejecuta varias veces con una frecuencia decreciente (actualmente 1, 5, 10, 30) para detectar y aplicar parches en caliente a las JVM dentro del contenedor.
hotdog-hotpatch
, no se aplicarán parches en caliente.hotdog-hotpatch
podría permanecer por un corto tiempo después de que salga el contenedor./dev/shm/.hotdog
dentro del contenedor. Si /dev/shm
no existe (como en el caso de los contenedores Docker iniciados con --ipc=none
), hotdog no se inyectará en el contenedor y no proporcionará parches. Hotdog está incluido de forma predeterminada en Bottlerocket 1.5.0.
Se puede habilitar el hotpatching para nuevos lanzamientos de Bottlerocket incluyendo las siguientes configuraciones en los datos del usuario.
[ settings . oci-hooks ]
log4j-hotpatch-enabled = true
Para los hosts existentes que ejecutan la última versión de Bottlerocket, se puede habilitar el hotpatching mediante el cliente API.
apiclient set oci-hooks.log4j-hotpatch-enabled=true
Habilitar la configuración en tiempo de ejecución no tiene ningún efecto en los contenedores en ejecución. Los contenedores recién lanzados serán parcheados.
Para instalar Hotdog, debe copiar los siguientes archivos en la ubicación correcta y establecer la configuración adecuada.
Log4jHotPatch.jar
a /usr/share/hotdog
(si crea el parche desde el código fuente, lo encontrará en build/libs
)make && sudo make install
para instalar hotdog-cc-hook
y hotdog-poststart-hook
en /usr/libexec/hotdog
y hotdog-hotpatch
en /usr/share/hotdog
oci-add-hooks
oci-add-hooks
con los hotdog hooks escribiendo el siguiente contenido en /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 "
]
}
}
}
Para ejecutar un contenedor con hotpatching habilitado, especifique docker run --runtime hotdog
. Para ejecutar con hotpatching habilitado de forma predeterminada en todos los contenedores, agregue el siguiente contenido a /etc/docker/daemon.json
:
"default-runtime": "hotdog"
Si desea excluirse de hotdog
incluso cuando está habilitado de forma predeterminada, especifique --runtime runc
.
hotdog
agregará varios archivos al directorio /dev/shm/.hotdog
en cada contenedor. Puede encontrar el registro de hotdog-hotpatch
en /dev/shm/hotdog.log
.
Consulte CONTRIBUCIÓN para obtener más información.
Este proyecto está bajo la licencia Apache-2.0.