Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

131
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!