Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

579
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda