Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

581
Vistas
Cómo usar docker ENTRYPOINT para ejecutar Java y luego ejecutar toque una vez que se completa el proceso de Java

Estoy tratando de ejecutar un pod con 2 contenedores. El contenedor principal ejecuta una imagen docker java que ejecuta el trabajo cron y el otro contenedor sidecar (logstash) lee el registro y lo envía al servidor Kibana. Como el contenedor principal se completa una vez que finaliza el trabajo cron, pero el contenedor sidecar sigue ejecutándose ya que no se apaga correctamente. Probé https://github.com/karlkfi/kubexit y preStop container lifecycle hook pero no funcionó. Ahora, quiero intentar detener el contenedor sidecar usando dockerfile. Docker ENTRYPOINT exec java image jar y una vez que finaliza el proceso de java, quería crear/tocar un archivo dentro del contenedor principal que mi otro contenedor sidecar busca ese archivo tocado.

Este es mi dockerfile actual

 FROM mcr.microsoft.com/java/jre:11-zulu-alpine ARG projectVersion WORKDIR /opt/example/apps/sync COPY /target/sync-app-${projectVersion}.jar app.jar ENTRYPOINT exec java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar app.jar

Quería agregar lo siguiente una vez que se complete la ejecución del proceso Java

 echo "Going to kill sync-app container..." trap 'touch /opt/example/apps/sync/container/done' EXIT

Realmente quería saber si es posible ejecutar el comando anterior una vez que finalice la ejecución de ENTRYPOINT. (puede agregar estos comandos en un script y pasar ese script al PUNTO DE ENTRADA). Pero no estoy seguro de qué se requiere para agregar esos comandos para ejecutarlos correctamente.

El código que tengo para el contenedor logstash que buscaría el archivo (que es creado por el primer contenedor)

 - args: - | dockerd-entrypoint.sh & while ! test -f /opt/example/apps/sync/container/done; do echo "Waiting for sync-app to finish..." sleep 5 done echo "sync-app finished, exiting" exit 0 command: - /bin/sh - -c

Por favor, hágamelo saber si se requiere más información. ¡Gracias por toda la ayuda de antemano!

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Puede esperar a que el proceso finalice según el PID del proceso. El intérprete de bash tiene un comando incorporado llamado wait donde, si se llama con un PID secundario como argumento, esperará hasta que el secundario haya terminado.

Entonces puede crear el siguiente entrypoint.sh y agregarlo a su contenedor Java.

punto de entrada.sh

 #!/bin/bash echo "Cleaning the file signal and running the entrypoint" rm -rf /opt/example/apps/sync/container/done exec java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar app.jar & child_pid=$! echo "Process started, waiting for the exit" wait $child_pid echo "Entrypoint exited, signaling the file" touch /opt/example/apps/sync/container/done
over 4 years ago · Santiago Trujillo Denunciar

0

Puede montar un EmptyDir tanto en su contenedor principal como en el sidecar.

El contenedor principal escribe un archivo en una ubicación determinada donde este directorio vacío se monta como la última declaración en su punto de entrada justo antes de que salga, y el sidecar tiene un bucle que verifica la existencia de este mismo archivo.

Una vez que se detecta, el contenedor sidecar sale 0;

Es un poco hacky, pero debería hacer el trabajo.

En una nota al margen, Docker y Kubernetes tienen algunos valores predeterminados sobre cómo manejar los registros. Los recopilan de STDOUT de cada contenedor y almacenan la salida en un archivo en el nodo que ejecuta el contenedor (/var/lib/docker/containers). Logstah podría configurarse como un daemonset ejecutándose en cada uno de estos nodos con la ubicación de registros de contenedores montada como hostPath y seguir los archivos mencionados anteriormente. De esta manera, sus contenedores no requieren ningún sodecar y, en mi opinión, simplifica la configuración general, dejando a logstash la responsabilidad de hacer lo que sea necesario con el registro.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda