Aspire und das alte MySQL-Passwort

Aspire und das alte MySQL-Passwort

- Matt

Der Aspire-AppHost von DropicIsland, einer Blazor-Anwendung mit PHP-API, startete wochenlang alles außer der API. Kein Fehler im Build, kein Absturz, die API stand einfach auf „Waiting“. Ich hatte das lange für ein Problem der API selbst gehalten und dort gesucht.

Die Ursache saß eine Ebene tiefer. Die API hing per WaitFor(db) an MySQL, und MySQL lief mit einem persistenten Datenvolume. Das offizielle MySQL-Image wertet MYSQL_ROOT_PASSWORD aber nur beim allerersten Start mit leerem Datenverzeichnis aus. Aspire erzeugt das Passwort, wenn man keins vorgibt, und reichte inzwischen ein anderes durch als damals. Der Healthcheck scheiterte mit „Access denied“, und WaitFor wartete für immer.

Die Lösung ist ein festes Passwort als Parameter, danach einmal das Volume löschen:

var passwort = builder.AddParameter("mysql-password", "dev-passwort", secret: true);

var db = builder.AddMySql("mysql", passwort)
    .WithDataVolume()
    .AddDatabase("app");

Der Haken: Ein Passwort im Code ist für die lokale Entwicklung in Ordnung, mehr nicht. Und beim Löschen des Volumes sind die Testdaten weg. Mein Rat beim nächsten Mal: erst im Dashboard schauen, welche Ressource nicht gesund ist, statt beim wartenden Dienst zu suchen. Wie ich Aspire überhaupt nur lokal einsetze, steht hier. Das Verhalten des Images ist auf Docker Hub unter den Umgebungsvariablen beschrieben.