Mein Service wird deployt, wird aber nie healthy
Der Build ist erfolgreich, Replikate starten, aber der Bereitstellen bleibt ausstehend, wird als ungesund markiert oder erhält nie Traffic.
Was das bedeutet
Der Health-Checks der Plattform — der prüft, ob der Port deiner App erreichbar ist — schlägt nie an, daher wird der Traffic nie auf die neuen Replikate umgeschaltet.
Warum das passieren kann
- Deine App lauscht nicht auf dem erwarteten Port. Lizard setzt eine
PORT-Umgebungsvariable (Standard-Container-Port3000) und prüft, ob deine App dort erreichbar ist. Wenn deine App fest auf einen anderen Port eingestellt ist oder nie einen Port bindet, schlägt der Health-Checks unbegrenzt fehl. Ein Python-App ist der übliche Fall:gunicornunduvicornbinden an127.0.0.1, sofern du nichts anderes angibst, und die Probe kommt von außerhalb des Prozesses. Python-App-Hosting enthält die Zeile--bind 0.0.0.0:$PORT, die jedes Framework braucht. - Der Service ist versehentlich im Worker-Modus. Das Setzen von
containerPort=0versetzt einen Service in den Worker-Modus, wodurch der Health-Checks und die Registrierung beim Load Balancer vollständig übersprungen werden. Ein Service, der eigentlich HTTP bereitstellen soll, aber aufcontainerPort=0umgestellt wurde, wird “erfolgreich” deployt und liefert dann einfach nie etwas aus — der Worker-Modus verdeckt das zugrunde liegende Startproblem, statt es sichtbar zu machen.
Mögliche Lösungen
Den aktuellen Port prüfen
lizard port --service apiWenn hier worker mode ausgegeben wird, hat der Service containerPort=0. Setze ihn wieder auf einen echten Port zurück, wenn dieser Service HTTP bereitstellen soll:
lizard port 3000 --service api
lizard redeploy --service apiBestätigen, dass deine App dort lauscht, wo Lizard es erwartet
Prüfe die Runtime-Logs auf Startfehler und vergleiche den Port, an den die App tatsächlich gebunden wurde, mit dem, was Lizard gesetzt hat:
lizard logs --service api
lizard ssh --service api -- env | grep PORTSiehe auch
- Background Workers — wann
containerPort=0sinnvoll ist (und wann nicht). - Bereitstellungen → lifecycle — wo der Health-Checks innerhalb eines Deploys stattfindet.