Bearbeiten

häufig gestellte Fragen zu Azure App Service unter Linux

Hinweis

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 der Veröffentlichung von App Service für Linux arbeiten wir daran, Features hinzuzufügen und Verbesserungen an unserer Plattform vorzunehmen. Dieser Artikel bietet Antworten auf Fragen, die uns unsere Kunden in letzter Zeit gestellt haben.

Wenn Sie eine Frage haben, kommentieren Sie diesen Artikel.

Integrierte Images

Ich möchte die integrierten Docker-Container forken, die die Plattform bereitstellt. Wo finde ich diese Dateien?

Sie finden alle Docker-Dateien auf GitHub.

Welche Werte werden für den Abschnitt Startdatei erwartet, wenn ich den Laufzeitstapel konfiguriere?

Stapel Erwarteter Wert
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 aller erforderlichen Konfigurationen (z. B /home/site/deployments/tools/startup_script.sh. )
Node.js die PM2-Konfigurationsdatei oder Ihre Skriptdatei
.NET Core der kompilierte DLL-Name als dotnet <myapp>.dll
PHP Optionaler benutzerdefinierter Start
Python Optionales 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 wurde, aber bevor Ihr Anwendungscode gestartet wird.

Verwaltung

Was geschieht, wenn ich im Azure-Portal die Schaltfläche "Neustart" drücke?

Diese Aktion ist identisch mit einem Docker-Neustart.

Kann ich secure Shell (SSH) verwenden, um eine Verbindung mit dem virtuellen Computer (VM) des App-Containers herzustellen?

Ja, Sie können dies über den Standort der Quellcodeverwaltung (Source Control Management, SCM) tun.

Hinweis

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

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

Legen Sie das reservierte Feld des App-Diensts auf true fest.

Continuous Integration und Bereitstellung

Meine Web-App verwendet weiterhin ein altes Docker-Containerimage, nachdem ich das Image auf Docker Hub aktualisiert habe. Unterstützen Sie Continuous Integration und Bereitstellung von benutzerdefinierten Containern?

Ja, um Continuous Integration/Bereitstellung für Azure Container Registry oder DockerHub einzurichten, indem Sie Continuous Deployment mit Web-App für Container folgen. Bei privaten Registrierungen können Sie den Container aktualisieren, indem Sie Ihre Web-App beenden und dann starten. Oder Sie können eine Dummyanwendungseinstellung ändern oder hinzufügen, um eine Aktualisierung Ihres Containers zu erzwingen.

Unterstützen Sie Stagingumgebungen?

Ja.

Kann ich "WebDeploy/MSDeploy" verwenden, um meine Web-App bereitzustellen?

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

Bei der Git-Bereitstellung meiner Anwendung tritt bei Verwendung einer Linux-Web-App ein Fehler auf. Wie kann ich das Problem umgehen?

Wenn die Git-Bereitstellung für Ihre Linux-Web-App fehlschlägt, wählen Sie eine der folgenden Optionen aus, um Ihren Anwendungscode bereitzustellen:

  • Verwenden der Continuous Delivery-Funktion (Vorschau): Sie können den Quellcode Ihrer App in einem Azure DevOps-Git-Repository oder GitHub-Repository speichern, um Azure Continuous Delivery zu verwenden. Weitere Informationen finden Sie unter Konfigurieren von Continuous Delivery für Die Linux-Web-App.

  • Verwenden der ZIP-Bereitstellungs-API: Um diese API zu verwenden, stellen Sie eine SSH-Verbindung mit Ihrer Web-App her, und navigieren Sie zu dem Ordner, in dem Sie Ihren Code bereitstellen möchten. Führen Sie den folgenden Code aus:

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

    Wenn Sie eine Fehlermeldung erhalten, dass der curl Befehl nicht gefunden wird, stellen Sie sicher, dass Sie curl mithilfe von apt-get install curl installieren, bevor Sie den vorherigen curl Befehl ausführen.

Sprachunterstützung

Ich möchte Websockets in meiner Node.js-Anwendung verwenden, spezielle Einstellungen oder Konfigurationen festlegen?

Ja, deaktivieren perMessageDeflate Sie in Ihrem serverseitigen Node.js Code. Wenn Sie beispielsweise socket.io verwenden, 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 bereitstellen (dank des Vorhandenseins einer Composer.lock-Datei), und Kudu löst dann eine Composer-Installation aus.

Benutzerdefinierte Container

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

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

Ich verwende meinen eigenen benutzerdefinierten Container. Ich möchte, dass die Plattform eine SMB-Freigabe im Verzeichnis "/home/" einbinden soll.

Wenn WEBSITES_ENABLE_APP_SERVICE_STORAGE die Einstellung nicht angegeben oder auf false festgelegt ist, wird das /home/ Verzeichnis nicht für Skalierungsinstanzen freigegeben , und geschriebene Dateien werden nicht über Neustarts hinweg beibehalten . Wenn Sie explizit auf true festlegenWEBSITES_ENABLE_APP_SERVICE_STORAGE, wird die Einbindung aktiviert. Wenn Sie die Einbindung deaktivieren möchten, müssen Sie, sobald dies auf TRUE festgelegt ist, explizit auf FALSE festlegenWEBSITES_ENABLE_APP_SERVICE_STORAGE.

Mein Container kann nicht mit "kein Speicherplatz auf dem Gerät" gestartet werden. 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 in dem persistenten Speicher gespeichert werden, der im Verzeichnis rootet /home .
  • Hostdatenträgerspeicherplatz: Der Speicherplatz auf dem Hostdatenträger wird zum Speichern von Containerimages verwendet. Sie wird von der Plattform über den Docker-Speichertreiber verwaltet.

Der Speicherplatz auf dem Hostdatenträger ist vom Dateisystemspeicherkontingent getrennt. Es ist nicht erweiterbar, und es gibt einen Grenzwert von 15 GB für jede instance. Es wird verwendet, um alle benutzerdefinierten Images auf dem Worker zu speichern. Abhängig von der genauen Verfügbarkeit des Hostdatenträgerspeichers können Sie möglicherweise mehr als 15 GB verwenden, aber dies ist nicht garantiert.

Wenn die beschreibbare Ebene des Containers Daten außerhalb des /home Verzeichnisses oder eines eingebundenen Azure-Speicherpfads speichert, wird auch der Speicherplatz auf dem Hostdatenträger verbraucht.

Die Plattform bereinigt routinemäßig den Speicherplatz des Hostdatenträgers, um nicht verwendete Container zu entfernen. Wenn der Container eine große Datenmenge außerhalb des /home Verzeichnisses oder von Bring Your Own Storage (BYOS) schreibt, führt dies zu Startfehlern oder Laufzeitausnahmen, sobald das Speicherplatzlimit des Hosts überschritten wird.

Es wird empfohlen, dass Sie Ihre Containerimages so klein wie möglich halten und Daten in den persistenten Speicher oder in BYOS schreiben, wenn Sie unter Linux App Service ausgeführt werden. Wenn dies nicht möglich ist, müssen Sie den App Service Plan aufteilen, da der Hostspeicherplatz fest ist und von allen Containern im App Service-Plan gemeinsam genutzt wird.

Der Start meines benutzerdefinierten Containers dauert lange, und die Plattform startet den Container neu, bevor er gestartet wird.

Sie können die Zeitspanne konfigurieren, die die Plattform wartet, bevor sie Ihren Container neu startet. Legen Sie dazu die App-Einstellung WEBSITES_CONTAINER_START_TIME_LIMIT auf den gewünschten Wert fest. Der Standardwert ist 230 Sekunden, und der Höchstwert beträgt 1800 Sekunden.

Wie lautet das Format für die URL des privaten Registrierungsservers?

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

Wie lautet das Format für den Imagenamen in der Option für die private Registrierung?

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

Kann ich mehr als einen Port für mein benutzerdefiniertes Containerimage verfügbar machen?

Das Verfügbarmachen mehrerer Ports wird nicht unterstützt.

Kann ich meinen eigenen Speicher mitbringen?

Ja, "Bring Your Own Storage " befindet sich in der Vorschauphase.

Warum kann ich das Dateisystem meines benutzerdefinierten Containers oder die ausgeführten Prozesse von der SCM-Website nicht durchsuchen?

Der SCM-Standort wird in einem separaten Container ausgeführt. Sie können das Dateisystem oder die ausgeführten Prozesse des App-Containers nicht überprüfen.

Muss ich HTTPS in meinem benutzerdefinierten Container implementieren?

Nein, die Plattform verarbeitet die HTTPS-Beendigung an den freigegebenen Front-Ends.

Muss ich WEBSITES_PORT für benutzerdefinierte Container verwenden?

Ja, dies 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 ASPNETCORE_URLS im Docker-Image verwenden?

Ja, überschreiben Sie die Umgebungsvariable, bevor die .NET Core-App gestartet wird. Z. B. im init.sh-Skript: export ASPNETCORE_URLS={Ihr Wert}

Mehrere Container mit Docker Compose

Gewusst wie Azure Container Registry (ACR) für die Verwendung mit mehreren Containern konfigurieren?

Um ACR mit mehreren Containern verwenden zu können, müssen alle Containerimages auf demselben ACR-Registrierungsserver gehostet werden. Sobald sie sich auf demselben Registrierungsserver befinden, müssen Sie Anwendungseinstellungen erstellen und dann die Docker Compose-Konfigurationsdatei aktualisieren, um den ACR-Imagenamen einzuschließen.

Erstellen Sie die folgenden Anwendungseinstellungen:

  • DOCKER_REGISTRY_SERVER_USERNAME
  • DOCKER_REGISTRY_SERVER_URL (vollständige URL, z. B. https://<server-name>.azurecr.io)
  • DOCKER_REGISTRY_SERVER_PASSWORD (Administratorzugriff in den ACR-Einstellungen aktivieren)

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

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

Gewusst wie wissen, auf welchen Container über das Internet zugegriffen werden kann?

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

Hier sind die Regeln zum Bestimmen, auf welchen Container zugegriffen werden kann – in der Reihenfolge der Rangfolge:

  • Anwendungseinstellung WEBSITES_WEB_CONTAINER_NAME , die auf den Containernamen festgelegt ist
  • Der erste Container zum Definieren von Port 80 oder 8080
  • Wenn keines der oben genannten Werte zutrifft, kann auf den ersten in der Datei definierten Container zugegriffen werden (verfügbar gemacht).

Gewusst wie depends_on verwenden?

Die depends_on Option wird auf App Service nicht unterstützt und ignoriert. Genau wie die Empfehlung zum Steuern des Startens und Herunterfahrens von Docker sollten App Service Apps mit mehreren Containern Abhängigkeiten über Anwendungscode überprüfen – sowohl beim Start als auch beim Trennen der Verbindung. 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 Websockets immer für Linux aktiviert sind.

Wichtig

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

Preise und SLA

Welche Preise gelten 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 Preise.

Weitere Fragen

Wie funktioniert die Containeraufwärmanforderung?

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

Um sicherzustellen, dass der Port für Azure-App Services ordnungsgemäß konfiguriert ist, lesen Sie die Frage Gewusst wie Angeben eines Ports in meinem Linux-Container?

Ist es möglich, das Timeout der Containeraufwärmanforderung zu erhöhen?

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

Gewusst wie port in meinem Linux-Container angeben?

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 ist erforderlich, zu wissen, an welchen Port Anforderungen weitergeleitet werden sollen. Wenn Ihr Container an Port 80 oder 8080 lauscht, kann App Service diesen automatisch erkennen. Wenn er auf einen anderen Port lauscht, müssen Sie die WEBSITES_PORT-App-Einstellung auf die Portnummer festlegen und App Service Anforderungen an diesen Port im Container weiterleiten. Die WEBSITES_PORT App-Einstellung hat keine Auswirkungen 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 Netzwerkfreigabe. Dies ermöglicht Szenarien für horizontales Hochskalieren, in denen Ihr Code auf mehreren Hosts ausgeführt werden muss. Leider blockiert dies die Verwendung von dateibasierten Datenbankanbietern wie SQLite, da es nicht möglich ist, exklusive Sperren für die Datenbankdatei zu erhalten. Wir empfehlen einen verwalteten Datenbankdienst: Azure SQL, Azure Database for MySQL oder Azure Database for PostgreSQL

Welche Zeichen werden in Namen von Anwendungseinstellungen unterstützt?

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

Wo kann ich neue Features anfordern?

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