Häufig gestellte Fragen (FAQ) – Azure App Service für Linux

Zusammenfassung

In diesem Artikel werden häufig gestellte Fragen zu App Service für Linux beantwortet.

Integrierte Images

Welche Werte sind beim Konfigurieren des Laufzeitstapels im Abschnitt „Startdatei“ anzugeben?

In der folgenden Tabelle sind die erwarteten Werte für jeden Stapel aufgeführt:

Stapel Erwarteter Wert
Java Platform, Standard Edition (Java SE) Der Befehl zum Starten Ihrer JAR-App (z. B java -jar /home/site/wwwroot/app.jar --server.port=80. )
Tomcat Der Speicherort eines Skripts zum Ausführen der erforderlichen Konfigurationen (z. B /home/site/deployments/tools/startup_script.sh. )
Node.js Die Process Manager 2 (PM2)-Konfigurationsdatei oder Die Skriptdatei
.NET Kern Der kompilierte DLL-Name als dotnet <myapp>.dll
PHP Optionaler benutzerdefinierter Start
Python Optionales Startskript
Rubin Das Ruby-Skript, das Ihre App initialisiert

Diese Befehle oder Skripts werden nach dem Start des integrierten Docker-Containers ausgeführt, aber bevor der Anwendungscode gestartet wird.

Verwaltung

Was geschieht, wenn ich die Schaltfläche "Neustart" im Azure-Portal auswählte?

Diese Aktion ist mit dem Docker-Neustart identisch.

Kann ich das Ssh-Protokoll (Secure Shell) verwenden, um eine Verbindung mit dem virtuellen Computer (VM) des App-Containers herzustellen?

Ja, Sie können eine Verbindung über die Azure Website für die Quellcodeverwaltung (Source Control Management, SCM) herstellen.

Note

Sie können auch über SSH, SFTP (Secure File Transfer Protocol) oder Visual Studio (VS)-Code eine Verbindung mit dem App-Container von Ihrem lokalen Computer herstellen.

Wie kann ich einen Linux App Service-Plan über eine SDK- oder Azure Resource Manager(ARM)-Vorlage erstellen?

Legen Sie das reserved Feld des App-Diensts auf true.

Kontinuierliche Integration und kontinuierliche Bereitstellung

Meine Web-App verwendet weiterhin ein altes Docker-Containerimage, nachdem ich es auf Docker Hub aktualisiert habe. Unterstützen Sie die kontinuierliche Integration und Bereitstellung (CI/CD) von benutzerdefinierten Containern?

Ja, CI/CD wird unterstützt. Weitere Informationen finden Sie unter Fortlaufende Bereitstellung mit Web App für Container.

Werden Stagingumgebungen unterstützt?

Ja.

Kann ich WebDeploy/MSDeploy verwenden?

Ja, legen Sie die WEBSITE_WEBDEPLOY_USE_SCM Einstellung auf false.

Die Git-Bereitstellung schlägt bei Linux-Webanwendungen fehl. Wie kann ich dieses Problem umgehen?

Verwenden Sie eine der folgenden Optionen:

  • Verwenden Sie azure Continuous Delivery mit Azure DevOps oder GitHub.
  • Verwenden Sie die zipdeploy API, und führen Sie den folgenden Befehl auf Ihrem lokalen Computer aus:
curl -X POST -u <user> --data-binary @<zipfile> https://{your-sitename}.scm.azurewebsites.net/api/zipdeploy

Sprachunterstützung

Ich möchte Websockets in meiner Node.js-Anwendung verwenden. Gibt es spezielle Einstellungen oder Konfigurationen, die festgelegt werden sollen?

Ja, deaktivieren Sie perMessageDeflate in Ihrem Node.js-Code auf der Serverseite. Wenn Sie beispielsweise verwenden socket.io, verwenden Sie den folgenden Code:

const io = require('socket.io')(server,{
  perMessageDeflate: false
});

Unterstützen Sie nicht kompilierte .NET Core-Apps?

Ja.

Unterstützen Sie Composer als Abhängigkeits-Manager für PHP-Apps?

Ja. Während einer Git-Bereitstellung sollte Kudu erkennen, dass Sie eine PHP-Anwendung (aufgrund des Vorhandenseins einer composer.lock Datei) bereitstellen. Kudu löst dann eine Composer-Installation aus.

Benutzerdefinierte Container

Kann ich verwaltete Identitäten verwenden, wenn Bilder aus Azure Container Registry abgerufen werden?

Ja. Verwenden Sie Azure CLI (nicht das Azure-Portal). Sie können systemseitig oder benutzerseitig zugewiesene Identitäten verwenden.

Ich verwende meinen eigenen benutzerdefinierten Container. Ich möchte, dass die Plattform eine SMB-Freigabe (Server Message Block) in das /home/ Verzeichnis einfügt. Ist dies bearbeitbar?

Wenn die WEBSITES_ENABLE_APP_SERVICE_STORAGE Einstellung entweder nicht angegeben oder auf "false" festgelegt ist, wird das /home/ Verzeichnis nicht für skalierungsübergreifende Instanzen freigegeben, und geschriebene Dateien werden nicht über Neustarts hinweg beibehalten. Die explizite Einstellung von WEBSITES_ENABLE_APP_SERVICE_STORAGE auf true aktiviert das Mount. Sobald dies auf true gesetzt ist, müssen Sie zum Deaktivieren des Einhängens explizit auf WEBSITES_ENABLE_APP_SERVICE_STORAGE setzen.

Mein Container startet nicht und zeigt die Meldung „Kein Speicherplatz mehr auf dem Gerät“ an. Was bedeutet dieser Fehler?

App Service für Linux verwendet zwei verschiedene Speichertypen:

  • Dateisystemspeicher: Der Dateisystemspeicher ist im App Service-Plankontingent enthalten. Sie wird verwendet, wenn Dateien im persistenten Speicher gespeichert werden, der im /home-Verzeichnis verwurzelt ist.
  • Hostspeicherplatz: Der Hostspeicherplatz wird zum Speichern von Containerimages verwendet. Sie wird von der Plattform über den Docker-Speichertreiber verwaltet.

Der Hostspeicherplatz ist vom Dateisystemspeicherkontingent getrennt. Sie kann nicht erweitert werden, und für jede Instanz gibt es einen Grenzwert von 15 GB. Es wird verwendet, um benutzerdefinierte Bilder auf dem Worker zu speichern. Je nach exakter Verfügbarkeit des Host-Festplattenspeichers können Sie möglicherweise mehr als 15 GBs verwenden, dies ist jedoch nicht garantiert.

Wenn die schreibbare Ebene des Containers Daten außerhalb des /home Verzeichnisses oder eines bereitgestellten Azure Storage Pfads speichert, wird auch der Hostspeicherplatz verbraucht. Die Plattform bereinigt den Hostspeicher routinemäßig, um nicht verwendete Container zu entfernen. Wenn der Container große Datenmengen außerhalb des Verzeichnisses /home schreibt oder kundeneigenen Speicher (BYOS) verwendet, führt dies zu Startfehlern oder Laufzeitausnahmen, sobald die Hostspeicherplatzgrenze überschritten wird. Halten Sie Ihre Container-Images so klein wie möglich und schreiben Sie Daten im persistenten Speicher oder in BYOS, wenn Sie App Service unter Linux verwenden. Wenn dies nicht möglich ist, teilen Sie den App Service-Plan auf, da der Hostspeicherplatz feststeht und zwischen allen Containern im App Service-Plan gemeinsam genutzt wird.

Mein benutzerdefinierter Container benötigt für den Start sehr lange, und die Plattform startet den Container neu, bevor er den Startvorgang abgeschlossen hat. Wie behebe ich das Problem?

Sie können die Zeitspanne konfigurieren, die die Plattform wartet, bevor Sie den Container neu starten. Legen Sie hierzu die App-Einstellung WEBSITES_CONTAINER_START_TIME_LIMIT auf den gewünschten Wert fest. Der Standardwert beträgt 230 Sekunden und der Maximalwert beträgt 1800 Sekunden.

Was ist das Format für die URL des privaten Registrierungsservers?

Geben Sie die vollständige Registrierungs-URL einschließlich https://.

Welches Format hat der Imagename in der Option zur privaten Registrierung?

Fügen Sie den vollständigen Bildnamen hinzu, einschließlich der privaten Registrierungs-URL (z. B myacr.azurecr.io/dotnet:latest. ). Bildnamen, die einen benutzerdefinierten Port verwenden, können nicht über das Portal eingegeben werden. Um docker-custom-image-name festzulegen, verwenden Sie das az Befehlszeilentool.

Kann ich mehr als einen Port in meinem benutzerdefinierten Containerimage verfügbar machen?

Dies wird nicht unterstützt.

Kann ich meinen eigenen Speicher (BYOS) mitbringen?

Ja. BYOS befindet sich derzeit in der Vorschau.

Warum kann ich über die SCM-Website das Dateisystem meines benutzerdefinierten Containers nicht durchsuchen und keine Prozesse ausführen?

Die SCM-Website wird in einem separaten Container ausgeführt. Sie können das Dateisystem oder aktive Prozesse des App-Containers nicht überprüfen.

Muss ich HTTPS in meinem benutzerdefinierten Container implementieren?

No. Die Plattform übernimmt die HTTPS-Terminierung an den gemeinsam genutzten Front-Ends.

Muss ich für benutzerdefinierte Container verwenden WEBSITES_PORT ?

Ja. Diese Einstellung ist für benutzerdefinierte Container erforderlich. Um einen benutzerdefinierten Port manuell zu konfigurieren, verwenden Sie die EXPOSE Anweisung in der Dockerfile-Datei und die App-Einstellung WEBSITES_PORT mit einem Portwert, der an den Container gebunden werden soll.

Kann ich im Docker-Image verwenden ASPNETCORE_URLS ?

Ja. Achten Sie darauf, die Umgebungsvariable vor dem Start der .NET Core-App zu überschreiben. Verwenden Sie z. B. im init.sh Skript Folgendes: export ASPNETCORE_URLS={Your value}.

Mehrere Container mit Docker Compose

Wie kann ich Azure Container Registry für die Verwendung mit mehreren Containern konfigurieren?

Um Azure Container Registry mit mehreren Containern zu verwenden, hosten Sie alle Containerimages auf demselben Azure Container Registry Registrierungsserver. Wenn sich die Images auf demselben Registrierungsserver befinden, erstellen Sie Anwendungseinstellungen, und aktualisieren Sie die Docker Compose-Konfigurationsdatei, um den Namen des Azure Container Registry Image einzuschließen.

Erstellen Sie die folgenden Anwendungseinstellungen:

  • DOCKER_REGISTRY_SERVER_USERNAME
  • DOCKER_REGISTRY_SERVER_URL (Verwenden Sie eine vollständige URL. Beispiel: https://<server-name>.azurecr.io.)
  • DOCKER_REGISTRY_SERVER_PASSWORD(Aktivieren Sie den Administratorzugriff in Azure Container Registry Einstellungen.)

Verweisen Sie in der Konfigurationsdatei wie im folgenden Beispiel auf Ihr Azure Container Registry Bild:

image: <server-name>.azurecr.io/<image-name>:<tag>

Wie finde ich heraus, auf welchen Container aus dem Internet zugegriffen werden kann?

  • Sie können nur einen Container für den Zugriff öffnen.
  • Nur die Ports 80 und 8080 sind zugänglich (geöffnete Ports).

Hier sind die Regeln zum Ermitteln, auf welchen Container Sie zugreifen können (in der Reihenfolge der Priorität):

  • Anwendungseinstellung WEBSITES_WEB_CONTAINER_NAME auf den Containernamen festgelegt.
  • Der erste Container zum Definieren von Port 80 oder 8080.
  • Wenn keine der vorherigen Regeln zutrifft, kann auf den ersten in der Datei definierten Container zugegriffen werden (verfügbar gemacht).

Wie verwende depends_onich?

Der App-Dienst unterstützt die depends_on Option nicht und ignoriert sie. Wie bei der Docker-Empfehlung zur Steuerung von Start und Herunterfahren sollten App Service-Multi-Container-Apps Abhängigkeiten sowohl beim Start als auch bei Verbindungsabbrüchen durch Anwendungscode prüfen.

Der folgende Beispielcode zeigt eine Python-App, die überprüft, ob ein Redis-Container ausgeführt wird:

          import time
          import redis
          from flask import Flask
          app = Flask(__name__)
          cache = redis.Redis(host='redis', port=6379)
          def get_hit_count():
              retries = 5
              while True:
                  try:
                      return cache.incr('hits')
                  except redis.exceptions.ConnectionError as exc:
                      if retries == 0:
                          raise exc
                      retries -= 1
                      time.sleep(0.5)
          @app.route('/')
          def hello():
              count = get_hit_count()
              return 'Hello from Azure App Service team! I have been seen {} times.\n'.format(count)
          if __name__ == "__main__":
              app.run(host="0.0.0.0", port=80, debug=True)

Werden WebSockets unterstützt?

WebSockets werden für Linux-Apps unterstützt. Die webSocketsEnabled ARM-Einstellung gilt nicht für Linux-Apps, da WebSockets immer für Linux aktiviert sind.

Von Bedeutung

WebSockets werden jetzt für Linux-Apps in Kostenlosen App-Service-Plänen unterstützt. Sie können bis zu fünf WebSocket-Verbindungen haben. Das Überschreiten dieses Grenzwerts führt zu einem HTTP 429 -Fehler (Zu viele Anforderungen).

Preis- und Servicelizenzvertrag (SLA)

Wie ist die Preisgestaltung jetzt, da der Dienst allgemein verfügbar ist?

Die Preise variieren je nach SKU und Region. Weitere Details finden Sie auf unserer Preisseite: App Service Pricing.

Andere Fragen

Wie funktioniert die Container-Aufwärmanforderung?

Wenn Der App-Dienst Ihren Container startet, sendet die Warmup-Anforderung eine HTTP-Anforderung an den /robots933456.txt Endpunkt Ihrer Anwendung. Dieser Endpunkt ist ein Platzhalter, ihre Anwendung muss jedoch antworten, indem sie einen Beliebigen Statuscode (einschließlich 5xx) zurückgibt. Wenn Ihre Anwendungslogik nicht antwortet, indem sie einen HTTP-Statuscode an nicht vorhandene Endpunkte sendet, kann die Warmupanforderung keine Antwort empfangen. Daher wird Ihr Container ständig neu gestartet.

Um dieses Standardverhalten zu ändern, passen Sie den Pfad des Warmup-Endpunkts und die Statuscodes an, bei denen die Website als aufgewärmt gilt. Legen Sie die WEBSITE_WARMUP_PATH und WEBSITE_WARMUP_STATUSES Anwendungseinstellungen fest.

Die Warmupanforderung kann auch aufgrund einer fehlerhaften Portkonfiguration fehlschlagen.

Ist es möglich, das Zeitlimit der Container-Warmupanforderung zu erhöhen?

Die Aufwärmanforderung schlägt standardmäßig fehl, nachdem sie 240 Sekunden auf eine Antwort vom Container gewartet hat. Sie können das Timeout der Container-Warmupanforderung erhöhen, indem Sie die Anwendungseinstellung WEBSITES_CONTAINER_START_TIME_LIMIT mit einem Wert zwischen 240 und 1800 Sekunden hinzufügen.

Wie gebe ich den Port in meinem Linux-Container an?

In der folgenden Tabelle wird beschrieben, wie Sie den Port in Ihrem Linux-Container angeben:

Containertyp Description Einen Port einrichten oder verwenden
Integrierte Container Wenn Sie eine Sprach-/Frameworkversion für eine Linux-App auswählen, wird ein vordefinierter Container für Sie ausgewählt. Verwenden Sie die PORT Umgebungsvariable, um den App-Code auf den richtigen Port zu verweisen.
Benutzerdefinierte Container Sie haben die vollständige Kontrolle über den Container. App Service hat keine Kontrolle darüber, an welchem Port Ihr Container lauscht. Es ist erforderlich zu wissen, zu welchem Port Anforderungen weitergeleitet werden sollen. Wenn Ihr Container an Port 80 oder 8080 lauscht, kann App Service ihn automatisch erkennen. Wenn es auf einem anderen Port lauscht, müssen Sie die WEBSITES_PORT Anwendungseinstellung auf die Portnummer festlegen, und der App Service leitet Anfragen an diesen Port im Container weiter. Die WEBSITES_PORT App-Einstellung hat keine Auswirkung innerhalb des Containers, und Sie können nicht als Umgebungsvariable innerhalb des Containers darauf zugreifen.

Kann ich eine dateibasierte Datenbank (z. B. SQLite) mit meiner Linux-Web-App verwenden?

Das Dateisystem Ihrer Anwendung ist eine eingebundene Netzfreigabe. Dies ermöglicht Skalierungsszenarien, in denen Ihr Code auf mehreren Hosts ausgeführt werden muss. Dies blockiert jedoch die Verwendung dateibasierter Datenbankanbieter wie SQLite, da es nicht möglich ist, exklusive Sperren für die Datenbankdatei zu erwerben. Verwenden Sie einen verwalteten Datenbankdienst wie Azure SQL, Azure Database for MySQL oder Azure Database for PostgreSQL.

Welche Zeichen werden in den Namen von Anwendungseinstellungen unterstützt?

Sie können nur Buchstaben (A-Z, a-Z), Zahlen (0-9) und Unterstrich (_) für Anwendungseinstellungen verwenden.

Wo kann ich neue Funktionen beantragen?

Sie können Ihre Idee im Web-Apps-Feedbackforum einreichen. Fügen Sie im Titel Ihrer Idee „[Linux]“ hinzu.

References