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 ) |
Kater | 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 | Optionales Startskript |
Rubin | 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.
Kontinuierliche Integration und kontinuierliche Bereitstellung
Meine Web-App verwendet nach dem Aktualisieren des Images auf Docker Hub noch ein altes Docker-Containerimage. Unterstützen Sie die kontinuierliche Integration und Bereitstellung von benutzerdefinierten Containern?
Ja, um Continuous Integration/Deployment für Azure Container Registry oder DockerHub einzurichten, folgen Sie Continuous Deployment mit Web-App für Container. 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, wählen Sie eine der folgenden Optionen, um Ihren Anwendungscode bereitzustellen:
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 ein Fehler angezeigt wird, dass der
curl
Befehl nicht gefunden wird, stellen Sie sicher, dass Sie curl mithilfe vonapt-get install curl
installieren, bevor Sie den vorherigencurl
Befehl ausführen.
Sprachunterstützung
Ich möchte in meiner Node.js-Anwendung Websockets verwenden. Muss ich bestimmte Einstellungen oder Konfigurationen festlegen?
Ja, deaktivieren Sie perMessageDeflate
in Ihrem Node.js-Code auf der Serverseite. Wenn Sie z. B. 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. 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 WEBSITES_ENABLE_APP_SERVICE_STORAGE
die Einstellung nicht angegeben ist oder auf false festgelegt ist, wird das /home/
Verzeichnis nicht zwischen Skalierungsinstanzen geteilt, und Dateien, die geschrieben wurden, werden bei Neustarts nicht beibehalten. Die explizite Einstellung von WEBSITES_ENABLE_APP_SERVICE_STORAGE
auf true aktiviert das Mount. Sobald dies auf „true“ festgelegt ist, müssen Sie, wenn Sie die Einbindung deaktivieren möchten, WEBSITES_ENABLE_APP_SERVICE_STORAGE
explizit auf false setzen.
Mein Container kann aufgrund der Meldung "Kein Speicherplatz auf dem Gerät" nicht starten. 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 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 oder Bring Your Own Storage (BYOS) schreibt, führt er zu Startfehlern oder Laufzeit-Ausnahmen, sobald die Hostspeicherplatzgrenze überschritten wurde.
Wir empfehlen Ihnen, Ihre Container-Images so klein wie möglich zu halten und Daten in den persistenten Speicher oder BYOS zu schreiben, wenn sie auf 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 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 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 an, 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 URL der privaten Registrierung (zum Beispiel 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?
Wir unterstützen es nicht, mehr als einen Port verfügbar zu machen.
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. Z. B. 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 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, 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 (offene 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 für App Service nicht unterstützt und wird ignoriert. Wie bei der Docker-Empfehlung zur Steuerung des Startens und Herunterfahrens müssen App Service Multi-Container-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 Dummy-Endpunkt, aber Ihre Anwendung muss 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 das Standardverhalten zu ändern, können Sie den Warmup-Endpunkt-Pfad und die Statuscodes anpassen, um die Website als aufgewärmt zu betrachten. Legen Sie dazu die WEBSITE_WARMUP_PATH - und WEBSITE_WARMUP_STATUSES Anwendungseinstellungen fest.
Die Warmupanforderung kann auch aufgrund einer fehlerhaften Portkonfiguration fehlschlagen.
Um sicherzustellen, dass der Port in Azure App Services korrekt konfiguriert ist, lesen Sie die Frage, wie gebe ich den Port in meinem Linux-Container an?
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?
Containertyp | Beschreibung | Anleitung zum Einrichten/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, zu welchem 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 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 (wie SQLite) mit meiner Linux-Web-App verwenden?
Das Dateisystem Ihrer Anwendung ist eine eingebundene Netzfreigabe. 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.
Nächste Schritte
- Was ist Azure App Service unter Linux?
- Einrichten von Stagingumgebungen in Azure App Service
- Stetige Bereitstellung mit Webanwendung für Container
- Wissenswertes: Web-Apps und Linux
- Referenz zu Umgebungsvariablen und App-Einstellungen
Kontaktieren Sie uns für Hilfe
Wenn Sie Fragen haben oder Hilfe benötigen, erstellen Sie eine Support-Anforderung oder fragen Sie den Azure Community-Support. Sie können auch Produktfeedback an die Azure Feedback Community senden.