Artículo
· 18 abr, 2025 Lectura de 3 min

Miniconsejo del día - Precargando la licencia en la imagen de IRIS de Docker

¿A quién no le ha pasado que está desarrollando un precioso ejemplo usando una imagen de IRIS de Docker y le ha fallado el proceso de generación de la imagen en el Dockerfile porque la licencia con la que se creo la imagen no contiene determinados privilegios?

En mi caso lo que estaba desplegando en Docker es una pequeña aplicación que utiliza el tipo de datos Vectorial. Con la versión Community esto no es un problema porque ya incluye el Vector Search y el almacenamiento vectorial, pero al cambiar la imagen de IRIS por un IRIS convencional (el latest-cd) me encontré que en el momento de construir la imagen incluyendo las clases que había generado esta me retornaba este error:

9.505 ERROR #15806: Vector Search not permitted with current license
9.505   > ERROR #5030: An error occurred while compiling class 'Inquisidor.Object.LicitacionOS'
9.505 Compiling class Inquisidor.Object.Licitacion
9.505 ERROR #15806: Vector Search not permitted with current license
9.505   > ERROR #5030: An error occurred while compiling class 'Inquisidor.Object.Licitacion'
9.538 Compiling class Inquisidor.Message.LicitacionResponse

Este error me dejó despistado, porque yo, como persona obediente, había definido en mi docker-compose.yml el parámetro que indica donde se encuentra mi licencia válida:

  iris:
    init: true
    container_name: iris
    build:
      context: .
      dockerfile: iris/Dockerfile
    ports:
      - 52774:52773
      - 51774:1972
    volumes:
    - ./iris/shared:/iris-shared
    environment:
    - ISC_DATA_DIRECTORY=/iris-shared/durable
    command: --check-caps false --ISCAgent false --key /iris-shared/iris.key

Me llevó un rato comprender que el problema es la imagen originaria que estaba usando, y no la licencia que tenía yo, cómo podéis ver, no soy el lápiz más afilado del estuche.

El problema estaba en el punto en el que importaba mis clases a la imagen de IRIS por defecto:

RUN \
zn "%SYS" \
do ##class(SYS.Container).QuiesceForBundling() \
do ##class(Security.Users).UnExpireUserPasswords("*") \
set sc=##class(%SYSTEM.OBJ).Load("/opt/irisapp/DemoSetup.Utilities.cls","ck") \
set helper=##class(DemoSetup.Utilities).%New() \ 
do helper.EnableSSLSuperServer() \
do ##class(Security.Applications).Import("/ApplicationInquisidor.xml",.n) \
zn "INQUISIDOR" \
set sc = $SYSTEM.OBJ.LoadDir("/opt/irisapp/src/Inquisidor", "ck", , 1) \
set production = "Inquisidor.Production" \
set ^Ens.Configuration("csp","LastProduction") = production \
do ##class(Ens.Director).SetAutoStart(production) \

La compilación del código me estaba retornando el error previo. ¿Qué debía hacer entonces para solucionarlo? Pues una cosa muy sencilla, debía enviarle a la imagen inicial de IRIS la nueva licencia y pedirle en la primera línea de los comandos que estaba usando que actualizase la licencia.

El primer paso es pasarle a la imagen la nueva licencia al directorio /mgr de la instalación, cosa que hice con este código:

COPY --chown=$ISC_PACKAGE_MGRUSER:$ISC_PACKAGE_IRISGROUP /iris/iris.key /usr/irissys/mgr
RUN chmod +x /usr/irissys/mgr/iris.key

La ruta de la instalación de IRIS en su imagen es /usr/irissys/mgr, la ruta /iris/iris.key es mi directorio local. Con la licencia en la imagen de IRIS sólo necesitaba indicarle a IRIS que actualice su licencia, por lo que modifiqué los comandos anteriores añadiendo la siguiente instrucción:

RUN \
zn "%SYS" \
do ##class(%SYSTEM.License).Upgrade() \

 Et voila! Ya tengo mi imagen de IRIS con mi licencia cargada antes de importar y compilar mis clases, se acabó el error de compilación.

Espero que os sea de utilidad.

Comentarios (0)1
Inicie sesión o regístrese para continuar