Hotdog é um conjunto de ganchos OCI usados para injetar o Log4j Hot Patch em contêineres.
Quando runc configura o contêiner, ele invoca hotdog-cc-hook
. hotdog-cc-hook
monta os arquivos hotpatch no sistema de arquivos do contêiner em /dev/shm/.hotdog
. Depois que o processo do contêiner principal é iniciado, runc invoca hotdog-poststart-hook
, que usa nsenter
para inserir os namespaces do contêiner e desembolsar um processo hotdog-hotpatch
. hotdog-hotpatch
é executado várias vezes com frequência decrescente (atualmente 1s, 5s, 10s, 30s) para detectar e fazer hotpatch de JVMs dentro do contêiner.
hotdog-hotpatch
, eles não receberão hot patch.hotdog-hotpatch
poderá permanecer por um curto período após a saída do contêiner./dev/shm/.hotdog
dentro do contêiner. Se /dev/shm
não existir (como no caso de contêineres Docker iniciados com --ipc=none
), o hotdog não será injetado no contêiner e não fornecerá hotpatching. Hotdog está incluído por padrão no Bottlerocket 1.5.0.
Hotpatching pode ser habilitado para novos lançamentos do Bottlerocket incluindo as seguintes configurações nos dados do usuário.
[ settings . oci-hooks ]
log4j-hotpatch-enabled = true
Para hosts existentes que executam a versão mais recente do Bottlerocket, o hotpatching pode ser habilitado usando o cliente API.
apiclient set oci-hooks.log4j-hotpatch-enabled=true
A ativação da configuração em tempo de execução não afeta a execução de contêineres. Os contêineres recém-lançados serão atualizados.
Para instalar o Hotdog, você precisa copiar os seguintes arquivos para o local correto e definir a configuração apropriada.
Log4jHotPatch.jar
para /usr/share/hotdog
(se você construir o hotpatch a partir do código-fonte, você o encontrará em build/libs
)make && sudo make install
para instalar hotdog-cc-hook
e hotdog-poststart-hook
em /usr/libexec/hotdog
e hotdog-hotpatch
em /usr/share/hotdog
oci-add-hooks
oci-add-hooks
com os ganchos hotdog gravando o seguinte conteúdo em /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 executar um contêiner com hotpatching habilitado, especifique docker run --runtime hotdog
. Para executar com hotpatching habilitado por padrão em todos os contêineres, adicione o seguinte conteúdo a /etc/docker/daemon.json
:
"default-runtime": "hotdog"
Se você deseja cancelar hotdog
mesmo quando ele está ativado por padrão, especifique --runtime runc
.
hotdog
adicionará vários arquivos ao diretório /dev/shm/.hotdog
em cada contêiner. Você pode encontrar o log do hotdog-hotpatch
em /dev/shm/hotdog.log
.
Consulte CONTRIBUINDO para obter mais informações.
Este projeto está licenciado sob a licença Apache-2.0.