Ich habe über eine Woche lang versucht, einen Windows-Container mit einem Azure App Service zum Laufen zu bringen. Anfangs wollte ich einfach eine Standard-Containerinstanz verwenden, aber es scheint, dass Sie nur die Option eines öffentlichen oder privaten Netzwerks haben, nicht eines benutzerdefinierten (anders als bei Linux-Containern). Es sieht so aus, als ob Sie, wenn Sie Ihren Windows-Container innerhalb eines App-Dienstes ausführen, dieselben Netzwerkoptionen erhalten wie bei anderen Websites. Azure-Unterstützung für Windows-Container in App Services istfast ein Jahr alt, aber abgesehen von sehr grundlegenden Szenarien gibt es relativ wenige Ressourcen, die sich damit befassen.
Mein Zweck bei der Verwendung eines Containers besteht darin, einen Windows-Hintergrunddienst eines Drittanbieters bei Bedarf ohne den Overhead einer VM auszuführen. Da ein App-Dienst verwendet wird, habe ich beschlossen, einen asp.net core rest-Endpunkt für einige Statusinformationen hinzuzufügen. Mein Container basiert auf mcr.microsoft.com/windows/servercore:ltsc2019
. Ich lade .net und asp.net core herunter und installiere sie (das Basisimage enthält nur .net Framework), installiere meine Dienste, erstelle und führe die Website aus. Dann ist mein Einstiegspunkt ein Powershell-Skript, das einige Konfigurationseinstellungen aktualisiert und den asp.net core-Endpunkt ausführt, der die Dienste verwaltet.
Wenn ich das Portal verwende, kann ich die Optionen für Container vs. Code, Windows vs. Linux auswählen und mit demGrundlegendes Schnellstartbild, aber mein eigenes Image in Azure Container Registry startet nicht richtig. Ich verwende eines derUnterstützte Basisbilder, und es läuft auf meinem lokalen Rechner einwandfrei. Auf Azure erstellt es alles, aber es startet nie. Die wenigen Protokolle deuten darauf hin, dass es startet, Dateifreigabe-Volumes mountet und dann im Grunde einfach abstürzt:
- Container für Image erstellen
- Versuch, den Container zu starten
- Container starten erfolgreich
- Container wurde gestartet
- Rufen Sie das Dienstprogramm „Container konfigurieren“ auf
- Dienstprogramm „Container konfigurieren“ abgeschlossen
- Container wurde gestartet
- Versuch, den Container zu stoppen
- Es wird versucht, den Container zu beenden.
- Versuch, den Container zu entfernen
- Container erfolgreich entfernt
Auch seltsam: Selbst mit dem Schnellstartbild sehe ich keine tatsächliche Containerinstanz. Das liegt vermutlich daran, dass sie direkt im App Service-Plan ausgeführt wird, obwohl das alles nicht sehr klar ist. Von der Web-App aus kann ich zum App Service-Plan (Windows-Containerplan) gehen, wo unter Apps eine einzelne App mit dem Typ „App, Container, Windows“ angezeigt wird, aber nirgends kann ich auf Konsolenprotokolle zugreifen oder eine Shell ausführen, wie ich es mit Ressourcen vom Typ Container-Image kann. In einigen Screenshots, die ich gefunden habe, kann ich unter „Einstellungen“ einen Link „Containereinstellungen“ sehen, den ich nicht habe, aber vielleicht ist der aus irgendeinem Grund nur für Linux-Container.
Wie behebe ich also Containerprobleme, wenn ich sie innerhalb eines App-Dienstes ausführe? Übersehe ich irgendwo etwas?
Antwort1
Diagnose
Sie finden wertvolle Debuginformationen, wenn Sie Diagnose & Solve Problems -> Container Initialization
in der Azure Web-App für Container auf klicken.
Kudu
App Service verfügt über eine Debugkonsole, die Sie zum Debuggen, Erkunden und Hochladen von Dateien sowie über JSON-Endpunkte zum Abrufen von Informationen zu Ihrer Umgebung verwenden können. Diese Konsole wird als Kudu-Konsole oder SCM-Dashboard für Ihre App bezeichnet.
Sie können auf dieses Dashboard zugreifen, indem Sie dem Link https:// folgen.[Ihr App-Name].scm.azurewebsites.net/.
Kudu bietet unter anderem Folgendes:
- Umgebungseinstellungen für Ihre Anwendungsprotokoll-Stream-Diagnose-Dump-Debug-Konsole, in der Sie PowerShell-Cmdlets und grundlegende DOS-Befehle ausführen können.
https://docs.microsoft.com/en-us/azure/app-service/troubleshoot-performance-degradation