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

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

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 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