Saltar al contenido

¿Cómo puedo ejecutar el script automáticamente después del inicio del contenedor Docker?

Te doy la bienvenida a nuestra página web, ahora hallarás la resolución que estabas buscando.

Solución:

La imagen en sí tiene un punto de entrada. ENTRYPOINT ["/run/entrypoint.sh"] especificado en el Dockerfile. Puede reemplazarlo por su propio script. Entonces, por ejemplo, cree un nuevo script, móntelo y llame primero /run/entrypoint.sh y luego espere el inicio de elasticsearch antes de ejecutar su init_sg.sh.

No estoy seguro de que esto resuelva su problema, pero vale la pena revisar mis repositoriosDockerfile

he creado un sencillo run.sh archivo copiado a la imagen acoplable y en el Dockerfile escribí CMD ["run.sh"]. De la misma manera define lo que quieras en run.sh y escribe CMD ["run.sh"]. Puedes encontrar otro ejemplo como el siguiente

Dockerfile

FROM java:8

RUN apt-get update && apt-get install stress-ng -y 
ADD target/restapp.jar /restapp.jar 
COPY dockerrun.sh /usr/local/bin/dockerrun.sh 
RUN chmod +x /usr/local/bin/dockerrun.sh 
CMD ["dockerrun.sh"]

dockerrun.sh

#!/bin/sh
java -Dserver.port=8095 -jar /restapp.jar &
hostname="hostname: `hostname`"
nohup stress-ng --vm 4 &
while true; do
  sleep 1000
done

Estaba tratando de resolver el problema exacto. Aquí está el enfoque que funcionó para mí.

  1. Cree un script de shell separado que verifique el estado de ES y solo inicie la inicialización de SG cuando ES esté listo:

Guión de concha

#!/bin/sh

echo ">>>>  Right before SG initialization <<<<"
# use while loop to check if elasticsearch is running 
while true
do
    netstat -uplnt | grep :9300 | grep LISTEN > /dev/null
    verifier=$?
    if [ 0 = $verifier ]
        then
            echo "Running search guard plugin initialization"
            /elasticsearch/plugins/search-guard-6/tools/sgadmin.sh -h 0.0.0.0 -cd plugins/search-guard-6/sgconfig -icl -key config/client.key -cert config/client.pem -cacert config/root-ca.pem -nhnv
            break
        else
            echo "ES is not running yet"
            sleep 5
    fi
done

Instalar script en Dockerfile

Deberá instalar el script en el contenedor para que sea accesible después de que se inicie.

COPY sginit.sh /
RUN chmod +x /sginit.sh

Actualizar script de punto de entrada

Deberá editar el script de punto de entrada o ejecutar el script de su imagen ES. Para que inicie sginit.sh en segundo plano ANTES de iniciar el proceso ES.

# Run sginit in background waiting for ES to start
/sginit.sh &

De esta manera, sginit.sh se iniciará en segundo plano y solo inicializará SG después de que se inicie ES.

La razón por la que este script sginit.sh se inicia antes que ES en segundo plano es para que no bloquee el inicio de ES. Se aplica la misma lógica si lo coloca después de iniciar ES, nunca se ejecutará a menos que coloque el inicio de ES en segundo plano.

Reseñas y calificaciones de la guía

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *