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

415
Vistas
¿Cómo usar un contenedor de inicio para verificar si MySQL está listo para las conexiones?

Amigos, estoy aprendiendo aquí y tratando de implementar un contenedor de inicio que verifique si MySQL está listo para las conexiones. Tengo un pod que ejecuta MySQL y otro pod con una aplicación que se conectará al pod de MySQL cuando esté listo.

Ningún éxito hasta ahora. El error que recibo es el siguiente: sh: mysql: not found . Así es como estoy intentando:

 initContainers: - name: {{ .Values.initContainers.name }} image: {{ .Values.initContainers.image }} command: - "sh" - "-c" - "until mysql --host=mysql.default.svc.cluster.local --user={MYSQL_USER} --password={MYSQL_PASSWORD} --execute=\"SELECT 1;\"; do echo waiting for mysql; sleep 2; done;"

¿Alguna idea de cómo podría hacer que esto funcione?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

No hagas absolutamente nada; incluso elimine los initContainers: tiene ahora.

Digamos que su aplicación se inicia antes de que la base de datos esté lista. Intenta conectarse, falla y sale. Kubernetes se da cuenta de esto, por lo que intentará iniciar la aplicación nuevamente; si falla repetidamente, comenzará a esperar progresivamente más tiempo entre reintentos (verá el estado CrashLoopBackOff). Eventualmente, el clúster habrá esperado lo suficiente para que la base de datos esté lista y el próximo reintento será exitoso.

Tenga en cuenta que esto es probablemente lo mismo que sucederá si la base de datos se reinicia después de que la aplicación ya se está ejecutando; "en el momento del inicio" no necesita ser un caso especial.

over 4 years ago · Santiago Trujillo Denunciar

0

Intenta usar esto.

contenedores de inicio:

 - name: init-cont image: busybox:1.31 command: ['sh', '-c', 'echo -e "Checking for the availability of MySQL Server deployment"; while ! nc -z mysql 3306; do sleep 1; printf "-"; done; echo -e " >> MySQL DB Server has started";']
over 4 years ago · Santiago Trujillo Denunciar

0

A su initContainer le falta el binario del cliente mysql .

Hay algunas maneras de resolver esto:

  1. Use una imagen oficial de mysql docker y use lo que tiene como comando.
  2. Cree su propia imagen acoplable a partir de una imagen base (por ejemplo, Alpine), instale mysql-client y luego modifique su initContainer para que funcione con Alpine.

Suponiendo que Alpine sea su imagen base, tendría un dockerfile como este:

 FROM alpine:3.14 RUN apk add mysql-client

Entonces su comando initContainer sería:

 command: - "/bin/ash" - "-c" - "until mysql --host=mysql.default.svc.cluster.local --user={MYSQL_USER} --password={MYSQL_PASSWORD} --execute=\"SELECT 1;\"; do echo waiting for mysql; sleep 2; done;"

Mi recomendación, use la imagen oficial de mysql docker

over 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