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

128
Vistas
Docker Comprobar si la base de datos se está ejecutando

entrypoint.sh contiene varios comandos cqlsh que requieren Cassandra. Sin algo como script.sh , los comandos cqlsh fallan porque Cassandra no tiene suficiente tiempo para comenzar. Cuando ejecuto lo siguiente localmente, todo parece funcionar correctamente. Sin embargo, cuando ejecuto a través de Docker, script.sh nunca finaliza. En otras palabras, $status nunca cambia de 1 a 0.

Dockerfile

 FROM cassandra RUN apt-get update && apt-get install -y netcat RUN mkdir /dir ADD ./scripts /dir/scripts RUN /bin/bash -c 'service cassandra start' RUN /bin/bash -c '/dir/scripts/script.sh' RUN /bin/bash -c '/dir/scripts/entrypoint.sh'

script.sh

 #!/bin/bash set -e cmd="$@" status=$(nc -z localhost 9042; echo $?) echo $status while [ $status != 0 ] do sleep 3s status=$(nc -z localhost 9042; echo $?) echo $status done exec $cmd

Alternativamente, podría hacer algo como until cqlsh -e 'some code'; do .. , como se indica aquí para psql, pero eso no parece funcionar para mí. Preguntándose cuál es la mejor manera de abordar el problema.

about 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Está haciendo un mal uso del comando EJECUTAR en su RUN . No es para iniciar servicios, es para realizar cambios en el sistema de archivos de su imagen. La razón por la que $status no se actualiza es porque no puede iniciar Cassandra a través de un comando RUN .

Debe agregar service cassandra start y /dir/scripts/entrypoint.sh a su archivo script.sh , y convertirlo en el CMD que se ejecuta de manera predeterminada:

Dockerfile

 CMD ['/bin/bash', '-c', '/dir/scripts/script.sh']

script.sh

 #!/bin/bash set -e # NOTE: I removed your `cmd` processing in favor of invoking entrypoint.sh # directly. # Start Cassandra before waiting for it to boot. service cassandra start status=$(nc -z localhost 9042; echo $?) echo $status while [ $status != 0 ] do sleep 3s status=$(nc -z localhost 9042; echo $?) echo $status done exec /bin/bash -c /dir/scripts/entrypoint.sh
about 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