Problema al utilizar el archivo de hosts en el contenedor de Docker para Karaf.
Mi problema es el “auto-encriptado” del archivo users.properties de karaf realizado por jasypt. Estoy utilizando Docker para implementar rápidamente 3 entornos de karaf.
Estoy utilizando el karaf-maven-plugin para construir un arquetipo sencillo de karaf, que contiene las características básicas que necesito, y luego construyo una imagen de Docker y la ejecuto en Docker, externalizando algunas carpetas que son específicas del entorno.
Aquí tienes un extracto de mi Dockerfile:
VOLUME ["/opt/karaf/deploy"]
VOLUME ["/opt/karaf/data"]
VOLUME ["/opt/karaf/etc/config-files"]
RUN rm /opt/karaf/etc/users.properties
RUN ln -s /opt/karaf/etc/config-files/users.properties /opt/karaf/etc/users.properties \
&& ln -s /opt/karaf/etc/config-files/log4j2.xml /opt/karaf/etc/log4j2.xml
Y aquí está el comando de ejecución que estoy utilizando:
docker run -it --rm -p 8181:8181 \
-v d:/amc_karaf/config-files:/opt/karaf/etc/config-files \
-v d:/amc_karaf/deploy:/opt/karaf/deploy \
-v d:/amc_karaf/data:/opt/karaf/data \
--name karaf-container karaf:test
Como puedes ver, el archivo users.properties real se almacena en mi host y no en mi contenedor, y funciona (la autenticación utilizando la contraseña almacenada en el host funciona).
Ahora, esto es lo que sucede:
- Cuando no externalizo el archivo users.properties (vínculo simbólico + volumen), las contraseñas se encriptan correctamente tan pronto como las modifico y guardo.
- Cuando utilizo la externalización del archivo, la encriptación se realiza solo cuando inicio karaf, no tan pronto como guardo el archivo.
Sospecho que el problema podría estar relacionado con Felix, que según mi comprensión, vigila el archivo en busca de cambios, y la externalización utilizando el volumen de Docker. Sin embargo, no he podido encontrar una solución a ese problema específico.
¿Tienes alguna idea o sugerencia sobre cómo resolver esto?
(También tengo el mismo problema con la carpeta deploy. Cuando agrego nuevos paquetes en la carpeta deploy, necesito reiniciar karaf, de lo contrario, no se iniciarán automáticamente como normalmente esperaría. Pero los veo cuando uso ls
en la carpeta.)
davy.ai
Solución de problemas de cifrado automático con Karaf y Docker
Descripción del problema
El cifrado automático del archivo
users.properties
de Karaf no funciona como se esperaba al utilizar Docker para implementar múltiples entornos de Karaf. Específicamente, el cifrado solo se realiza cuando se inicia el contenedor de Karaf y no inmediatamente después de modificar y guardar el archivo. Este problema también podría estar relacionado con la externalización del archivo utilizando Docker volume.Solución potencial
Una posible causa de este problema podría estar relacionada con Apache Felix que no está monitoreando el archivo externalizado en busca de cambios. Para solucionar esto, podrías intentar usar un mecanismo de “watchdog” para monitorear el archivo en busca de cambios y realizar automáticamente el cifrado cuando se modifique. Para implementar esta solución, podrías:
Otra solución potencial podría ser modificar el Dockerfile para incluir la lógica de cifrado dentro del propio contenedor de Docker, en lugar de depender de volúmenes externalizados. Esto podría implicar:
Problema adicional
El autor también informó un problema con la carpeta “deploy” que no carga automáticamente nuevos paquetes. Este problema podría estar relacionado con la forma en que Karaf busca nuevos paquetes, o podría ser un problema de configuración del propio Dockerfile. Para solucionar este problema, podrías intentar:
En general, existen varias soluciones potenciales para los problemas descritos anteriormente. Mediante el análisis cuidadoso de las causas de estos problemas y la prueba de diferentes soluciones, debería ser posible encontrar una configuración que cumpla con las necesidades del autor.