Bearbeiten

Freigeben über


Häufig gestellte Fragen (FAQ) zu Azure App Service unter Linux

Notiz

Waren diese Informationen hilfreich? Wir schätzen Ihr Feedback. Bitte verwenden Sie die Schaltfläche Feedback auf dieser Seite, um uns mitzuteilen, wie gut Ihnen dieser Artikel gefallen hat oder wie wir ihn verbessern können.

Mit dem Release von App Service unter Linux erweitern wir unsere Plattform um Features und nehmen Verbesserungen an ihr vor. Dieser Artikel enthält Antworten auf Fragen, die uns kürzlich von Kunden gestellt wurden.

Wenn Sie eine Frage haben, schreiben Sie einen Kommentar zu diesem Artikel.

Integrierte Images

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

Stapel Erwarteter Wert
Java SE der Befehl, mit dem Ihre JAR-App gestartet wird (z. B. java -jar /home/site/wwwroot/app.jar --server.port=80)
Tomcat der Speicherort eines Skripts zum Ausführen aller erforderlichen Konfigurationen (z. B. /home/site/deployments/tools/startup_script.sh)
Node.js die PM2-Konfigurationsdatei oder Ihre Skriptdatei
.NET Core der Name der kompilierten DLL-Datei als dotnet <myapp>.dll
PHP optional benutzerdefinierter Start
Python optional Startskript
Ruby das Ruby-Skript, mit dem Sie Ihre App initialisieren möchten

Diese Befehle oder Skripts werden ausgeführt, nachdem der integrierte Docker-Container gestartet ist, aber bevor der Code Ihrer Anwendung gestartet wird.

Verwaltung

Was geschieht, wenn ich auf die Schaltfläche „Neu starten“ im Azure-Portal klicke?

Diese Aktion ist mit dem Docker-Neustart identisch.

Kann ich über Secure Shell (SSH) eine Verbindung mit dem virtuellen Computer des App-Containers herstellen?

Ja, Sie können dazu die Website für die Quellcodeverwaltung (Source Control Management, SCM) verwenden.

Notiz

Sie können auch direkt über SSH, SFTP oder Visual Studio Code (zum Livedebuggen von Node.js-Apps) eine Verbindung vom lokalen Entwicklungscomputer zum App-Container herstellen. Weitere Informationen finden Sie unter Remotedebuggen und SSH in App Service unter Linux.

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

Legen Sie das App-Dienstfeld reserviert auf true fest.

Continuous Integration und Continuous Deployment

Meine Web-App verwendet nach dem Aktualisieren des Images auf Docker Hub noch ein altes Docker-Containerimage. Unterstützen Sie Continuous Integration/Deployment von benutzerdefinierten Containern?

Ja. Informationen zum Einrichten von Continuous Integration/Continuous Deployment für Azure Container Registry oder DockerHub finden Sie unter Continuous Deployment mit Web-App für Container (in englischer Sprache). Bei privaten Registrierungen können Sie den Container aktualisieren, indem Sie Ihre Web-App beenden und dann wieder starten. Sie können auch eine Dummyeinstellung in der Anwendung ändern oder hinzufügen, um die Aktualisierung Ihres Containers zu erzwingen.

Werden Stagingumgebungen unterstützt?

Ja.

Kann ich „WebDeploy/MSDeploy“ zum Bereitstellen meiner Web-App verwenden?

Ja, Sie müssen die App-Einstellung WEBSITE_WEBDEPLOY_USE_SCM auf false festlegen.

Bei der Git-Bereitstellung meiner Anwendung tritt ein Fehler auf, wenn ich eine Linux-Web-App verwende. Wie kann ich dieses Problem umgehen?

Wenn bei der Git-Bereitstellung in Ihrer Linux-Web-App ein Fehler auftritt, stellen Sie Anwendungscodes wie folgt bereit:

  • Verwenden Sie das Feature "Fortlaufende Übermittlung (Vorschau):" Sie können den Quellcode Ihrer App in einem Azure DevOps Git-Repository oder GitHub-Repository speichern, um die fortlaufende Bereitstellung von Azure zu verwenden. Weitere Informationen finden Sie unter Konfigurieren von Continuous Delivery für die Linux-Web-App (in englischer Sprache).

  • Verwenden Sie die API für die ZIP-Bereitstellung:Stellen Sie zur Verwendung dieser API eine SSH-Verbindung mit Ihrer Web-App her, und navigieren Sie zu dem Ordner, in dem der Code bereitgestellt werden soll. Führen Sie den folgenden Code aus:

    curl -X POST -u <user> --data-binary @<zipfile> https://{your-sitename}.scm.azurewebsites.net/api/zipdeploy
    

    Wenn eine Fehlermeldung angezeigt wird, dass der Befehl curl nicht gefunden wird, müssen Sie curl unbedingt mithilfe von apt-get install curl installieren, bevor Sie den Befehl curl ausführen.

Sprachunterstützung

Ich möchte in meiner Node.js-Anwendung Websockets verwenden. Muss ich bestimmte Einstellungen oder Konfigurationen festlegen?

Ja, deaktivieren Sie in Ihrem serverseitigen Node.js-Code perMessageDeflate. Verwenden Sie beispielsweise den folgenden Code, wenn Sie socket.io nutzen:

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. Bei einer Git-Bereitstellung erkennt Kudu, dass Sie eine PHP-Anwendung bereitstellen (weil eine composer.lock-Datei existiert), und löst eine Composerinstallation aus.

Benutzerdefinierte Container

Kann ich beim Pullen von Images aus ACR verwaltete Identitäten mit App Service verwenden?

Ja, diese Funktion ist über die Azure CLI verfügbar. Sie können systemseitig oder benutzerseitig zugewiesene Identitäten verwenden. Diese Funktion wird im Azure-Portal derzeit nicht unterstützt.

Ich verwende meinen eigenen benutzerdefinierten Container. Ich möchte, dass die Plattform eine SMB-Freigabe im Verzeichnis „/home/“ bereitstellt.

Wenn die Einstellung WEBSITES_ENABLE_APP_SERVICE_STORAGEnicht angegeben oder auf false festgelegt ist, wird das Verzeichnis /home/ nicht über Skalierungsinstanzen freigegeben, und geschriebene Dateien werden über Neustarts hinweg nicht beibehalten. Das explizite Festlegen von WEBSITES_ENABLE_APP_SERVICE_STORAGE auf true aktiviert die Einbindung. Sobald dies auf „true“ festgelegt ist und Sie die Bereitstellung deaktivieren möchten, müssen Sie WEBSITES_ENABLE_APP_SERVICE_STORAGE explizit auf false festlegen.

Mein Container kann nicht mit "kein Platz auf dem Gerät" beginnen. 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 permanenten Speicher gespeichert werden, der /home im 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 einen bereitgestellten Azure-Speicherpfad speichert, wird auch der Hostspeicherplatz verbraucht.

Die Plattform bereinigt den Hostspeicher routinemäßig, um nicht verwendete Container zu entfernen. Wenn der Container eine große Anzahl von Daten außerhalb des /home Verzeichnisses schreibt oder BYOS (Bring Your Own Storage, Bring Your Own Storage) schreibt, führt er zu Startfehlern oder Laufzeit-Ausnahmen, sobald der Grenzwert für den Hostspeicherplatz überschritten wurde.

Es wird empfohlen, ihre Containerimages so klein wie möglich zu halten und Daten in den persistenten Speicher oder BYOS zu schreiben, wenn sie unter Linux App Service ausgeführt werden. Wenn nicht möglich, müssen Sie den App Service-Plan aufteilen, da der Hostspeicherplatz fest ist 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.

Sie können den Zeitraum konfigurieren, den die Plattform vor dem Neustarten Ihres Containers wartet. Legen Sie hierzu die App-Einstellung WEBSITES_CONTAINER_START_TIME_LIMIT auf den gewünschten Wert fest. Der Standardwert ist 230 Sekunden, und der Maximalwert ist 1800 Sekunden.

Welches Format hat die Server-URL der privaten Registrierung?

Geben Sie die vollständige Registrierungs-URL samt http:// oder https:// ein.

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

Fügen Sie den vollständigen Namen hinzu, einschließlich der URL der privaten Registrierung (Beispiel: myacr.azurecr.io/dotnet:latest). Namen von Images, die einen benutzerdefinierten Port verwenden, können nicht über das Portal eingegeben werden. Verwenden Sie das Befehlszeilentoolaz, um docker-custom-image-name festzulegen.

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

Es kann nur ein Port verfügbar gemacht werden.

Kann ich meinen eigenen Speicher verwenden?

Ja, Bring Your Own Storage ist als Vorschauversion verfügbar.

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?

Nein. Die Plattform handhabt die HTTPS-Beendigung an den freigegebenen Front-Ends.

Muss ich „WEBSITES_PORT“ für benutzerdefinierte Container verwenden?

Ja. Diese Einstellung ist für benutzerdefinierte Container erforderlich. Wenn Sie manuell einen benutzerdefinierten Port konfigurieren möchten, können Sie die EXPOSE-Anweisung im Dockerfile sowie die App-Einstellung „WEBSITES_PORT“ mit einem Portwert verwenden, der für den Container gebunden werden soll.

Kann ich „ASPNETCORE_URLS“ im Docker-Image verwenden?

Ja. Überschreiben Sie die Umgebungsvariable vor dem Start der .NET Core-App. Beispiel: Im Skript „init.sh“: export ASPNETCORE_URLS={Ihr Wert}

Mehrere Container mit Docker Compose

Wie kann ich die Azure Container Registry (ACR) für die Verwendung mehrerer Container konfigurieren?

Um ACR mit mehreren Containern zu verwenden, müssen alle Containerimages auf dem gleichen ACR-Registrierungsserver gehostet sein. Sobald sie sich auf dem gleichen Registrierungsserver befinden, müssen Sie Anwendungseinstellungen erstellen und dann die Konfigurationsdatei von Docker Compose mit den Namen der ACR-Images aktualisieren.

Erstellen Sie die folgenden Anwendungseinstellungen:

  • DOCKER_REGISTRY_SERVER_USERNAME
  • DOCKER_REGISTRY_SERVER_URL (vollständige URL, Bsp.: https://<server-name>.azurecr.io)
  • DOCKER_REGISTRY_SERVER_PASSWORD (Aktivieren des Administratorzugriffs in den ACR-Einstellungen)

Verweisen Sie in der Konfigurationsdatei auf Ihr ACR-Image, wie im folgenden Beispiel:

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

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

  • Nur ein Container kann für den Zugriff geöffnet sein
  • Nur Port 80 und 8080 sind zugänglich (verfügbar gemachte Ports)

Anhand dieser Regeln können Sie bestimmen, auf welchen Container zugegriffen werden kann, anhand der Rangfolge aufgelistet:

  • Die Anwendungseinstellung WEBSITES_WEB_CONTAINER_NAME ist auf den Containernamen festgelegt
  • Der erste Container, der Port 80 oder 8080 definiert
  • Wenn keiner der oben genannten Punkte zutrifft, kann auf den in der Datei zuerst definierten (verfügbar gemachten) Container zugegriffen werden

Wie verwende ich depends_on?

Die depends_on-Option wird in App Service nicht unterstützt und wird ignoriert. Wie bei der Docker-Empfehlung zur Steuerung des Startens und Herunterfahrens sollten App Service-Multicontainer-Apps Abhängigkeiten durch Anwendungscode überprüfen – sowohl beim Start als auch beim Trennen. 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)

Websockets

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

Wichtig

Web Sockets werden jetzt für Linux-Apps in kostenlosen App Service-Plänen unterstützt. Wir unterstützen bis zu fünf Websocketverbindungen in kostenlosen App Service-Plänen. Das Überschreiten dieses Grenzwerts führt zu einer HTTP 429-Antwort (zu viele Anforderungen).

Preise und SLA

Wie erfolgt die Abrechnung für den nun allgemein verfügbaren Dienst?

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

Andere Fragen

Wie funktioniert die Container-Aufwärmanforderung?

Wenn Azure App Services Ihren Container startet, sendet die Aufwärmanforderung eine HTTP-Anforderung an den Endpunkt /robots933456.txt Ihrer Anwendung. Dies ist einfach ein Dummyendpunkt, aber Ihre Anwendung muss mit einem beliebigen Nicht-5XX-Statuscode antworten. Wenn Ihre Anwendungslogik nicht mit einem HTTP-Statuscode auf nicht vorhandene Endpunkte antwortet, kann die Aufwärmanforderung keine Antwort empfangen und startet Ihren Container fortwährend neu. Die Aufwärmanforderung kann auch aufgrund einer Portfehlkonfiguration fehlschlagen.

Um sicherzustellen, dass der Port in Azure App Services ordnungsgemäß konfiguriert ist, lesen Sie unter Gewusst wie: Angeben des Ports in meinem Linux-Container nach.

Ist es möglich, das Timeout für Container-Aufwärmanforderungen 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 für Container-Aufwärmanforderungen 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?

Containertyp Beschreibung Festlegen/Verwenden des Ports
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 Umgebungsvariable PORT, um Ihren 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 muss jedoch bekannt sein, an welchen Port Anforderungen weitergeleitet werden sollen. Wenn Ihr Container an Port 80 oder 8080 lauscht, kann App Service ihn automatisch erkennen. Wenn er an einem anderen Port lauscht, müssen Sie die App-Einstellung WEBSITES_PORT auf die Portnummer festlegen, und App Service leitet Anforderungen an diesen Port im Container weiter. Die App-Einstellung WEBSITES_PORT hat innerhalb des Containers keine Auswirkungen, und Sie können nicht als Umgebungsvariable innerhalb des Containers darauf zugreifen.

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

Das Dateisystem Ihrer Anwendung ist eine eingebundene Netzwerkfreigabe. Dadurch sind Aufskalierungsszenarios möglich, in denen Ihr Code auf mehreren Hosts ausgeführt werden muss. Leider wird so die Nutzung von dateibasierten Datenbankanbietern wie SQLite verhindert, da es nicht möglich ist, exklusive Sperren für die Datenbankdatei abzurufen. Wir empfehlen einen verwalteten Datenbankdienst: 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.