Vanliga frågor och svar – Azure App Service on Linux

Sammanfattning

Den här artikeln besvarar vanliga frågor om App Service on Linux.

Inbyggda avbildningar

Vilka är de förväntade värdena för avsnittet Startfil vid konfiguration av runtime stacken?

I följande tabell visas de förväntade värdena för varje stack:

Stapel Förväntat värde
Java Platform, Standard Edition (Java SE) Kommandot för att starta JAR-appen (till exempel java -jar /home/site/wwwroot/app.jar --server.port=80)
Tomcat Platsen för ett skript för att utföra nödvändiga konfigurationer (till exempel /home/site/deployments/tools/startup_script.sh)
Node.js Konfigurationsfilen för Process Manager 2 (PM2) eller skriptfilen
.NET Core Det kompilerade DLL-namnet som dotnet <myapp>.dll
PHP Valbar anpassad uppstart
python Valfritt startskript
Rubin Ruby-skriptet som initierar din app

Dessa kommandon eller skript körs när den inbyggda Docker-containern startar, men innan programkoden startar.

Management

Vad händer när jag väljer omstartsknappen i Azure portalen?

Den här åtgärden är samma som en Docker-omstart.

Kan jag använda SSH-protokollet (Secure Shell) för att ansluta till den virtuella datorn (VM) för appcontainer?

Ja, du kan ansluta via platsen för Azure källkontrollhantering (SCM).

Note

Du kan också ansluta till appcontainern från den lokala datorn med hjälp av SSH, SFTP (Secure File Transfer Protocol) eller Visual Studio (VS) Code.

Hur skapar jag en Linux App Service-plan via en SDK- eller Azure Resource Manager-mall (ARM) ?

Ange fältet reserved för App Service till true.

Kontinuerlig integrering och distribution

Min webbapp använder fortfarande en gammal Docker-containeravbildning när jag har uppdaterat den på Docker Hub. Har du stöd för kontinuerlig integrering och distribution (CI/CD) av anpassade containrar?

Ja, CI/CD stöds. Mer information finns i Kontinuerlig distribution med Web App for Containers.

Stöder ni staging-miljöer?

Ja.

Kan jag använda WebDeploy/MSDeploy?

Ja, ställ in inställningen på WEBSITE_WEBDEPLOY_USE_SCMfalse.

Git-distribution misslyckas vid användning av Linux-webbappar. Hur kan jag kringgå problemet?

Använd något av följande alternativ:

  • Använd Azure Continuous Delivery med Azure DevOps eller GitHub.
  • Använd API:et zipdeploy och kör följande kommando från den lokala datorn:
curl -X POST -u <user> --data-binary @<zipfile> https://{your-sitename}.scm.azurewebsites.net/api/zipdeploy

Språkstöd

Jag vill använda webb sockets i mitt Node.js-program. Finns det några särskilda inställningar eller konfigurationer att ställa in?

Ja, inaktivera perMessageDeflate i Node.js kod på serversidan. Om du till exempel använder socket.io, använd följande kod:

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

Har du stöd för okompilerade .NET Core-appar?

Ja.

Har du stöd för Composer som beroendehanterare för PHP-appar?

Ja. Under en Git-distribution bör Kudu identifiera att du distribuerar ett PHP-program (på grund av förekomsten av en composer.lock fil). Kudu utlöser sedan en kompositörsinstallation.

Anpassade behållare

Kan jag använda hanterade identiteter när jag hämtar bilder från Azure Container Registry?

Ja. Använd Azure CLI (inte Azure-portalen). Du kan använda systemtilldelade eller användartilldelade identiteter.

Jag använder min egen anpassade container. Jag vill att plattformen ska montera en SMB-resurs (Server Message Block) i /home/ katalogen. Är det här genomförbart?

Om inställningen WEBSITES_ENABLE_APP_SERVICE_STORAGE antingen är ospecificerad eller inställd på false/home/ delas inte katalogen mellan skalningsinstanser och filer som skrivs bevaras inte mellan omstarter. Explicit inställning WEBSITES_ENABLE_APP_SERVICE_STORAGE till true aktiverar monteringen. När detta är inställt på sant måste du uttryckligen ange WEBSITES_ENABLE_APP_SERVICE_STORAGEfalse för att inaktivera monteringen.

Det går inte att starta containern med meddelandet "inget utrymme kvar på enheten". Vad betyder det här felet?

App Service på Linux använder två olika typer av lagring:

  • Lagring av filsystem: Filsystemlagringen ingår i App Service-plankvoten. Den används när filer sparas i den beständiga lagring som är rotad i /home katalogen.
  • Värddiskutrymme: Värddiskutrymmet används för att lagra containeravbildningar. Den hanteras av plattformen via Docker-lagringsdrivrutinen.

Värddiskutrymmet är separat från lagringskvoten för filsystemet. Den kan inte expanderas och det finns en gräns på 15 GB för varje instans. Den används för att lagra anpassade avbildningar på arbetaren. Du kanske kan använda större än 15 GB beroende på den exakta tillgängligheten för värddiskutrymmet, men detta är inte garanterat.

Om containerns skrivbara lager sparar data utanför /home katalogen eller en monterad Azure Storage sökväg förbrukas även värddiskutrymmet. Plattformen rensar rutinmässigt värddiskutrymmet för att ta bort oanvända containrar. Om containern skriver en stor mängd data utanför /home katalogen eller använder BYOS (Bring Your Own Storage) resulterar det i startfel eller körningsundatag när diskutrymmesgränsen för värddisken överskrids. Håll containeravbildningarna så små som möjligt och skriv data till den beständiga lagringen eller BYOS när de körs i App Service för Linux. Om detta inte är möjligt delar du upp App Service-planen eftersom värddiskutrymmet är fast och delat mellan alla containrar i App Service-planen.

Det tar lång tid att starta den anpassade containern och plattformen startar om containern innan den är klar. Hur åtgärdar jag detta?

Du kan konfigurera hur lång tid plattformen väntar innan containern startas om. Om du vill göra det anger du appinställningen WEBSITES_CONTAINER_START_TIME_LIMIT till önskat värde. Standardvärdet är 230 sekunder och det maximala värdet är 1 800 sekunder.

Vilket format har url:en för den privata registerservern?

Ange den fullständiga register-URL:en, inklusive https://.

Vilket format har bildnamnet i alternativet för det privata registret?

Lägg till det fullständiga avbildningsnamnet, inklusive url:en för det privata registret (till exempel myacr.azurecr.io/dotnet:latest). Bildnamn som använder en anpassad port kan inte anges via portalen. Om du vill ange docker-custom-image-nameanvänder du az kommandoradsverktyget.

Kan jag exponera fler än en port på min anpassade containeravbildning?

Detta stöds inte.

Kan jag ta med mitt eget lagringsutrymme (BYOS)?

Ja. BYOS är för närvarande i förhandsversion.

Varför kan jag inte bläddra i min anpassade containers filsystem eller köra processer från SCM-platsen?

SCM-webbplatsen körs i en separat container. Du kan inte kontrollera filsystemet eller köra processer i appcontainern.

Behöver jag implementera HTTPS i min anpassade container?

No. Plattformen hanterar HTTPS-avslutning i delade klientdelar.

Behöver jag använda WEBSITES_PORT för anpassade containrar?

Ja. Den här inställningen krävs för anpassade containrar. Om du vill konfigurera en anpassad port manuellt använder du instruktionen EXPOSE i Dockerfile och appinställningen WEBSITES_PORT med ett portvärde för att binda på containern.

Kan jag använda ASPNETCORE_URLS i Docker-avbildningen?

Ja. Se till att skriva över miljövariabeln innan .NET Core-appen startar. I skriptet init.sh använder du till exempel: export ASPNETCORE_URLS={Your value}.

Flera containrar med Docker Compose

Hur konfigurerar jag Azure Container Registry att använda med flera containrar?

Om du vill använda Azure Container Registry med flera containrar är du värd för alla containeravbildningar på samma Azure Container Registry registerserver. När avbildningarna finns på samma registerserver skapar du programinställningar och uppdaterar Docker Compose-konfigurationsfilen så att den innehåller Azure Container Registry avbildningsnamn.

Skapa följande programinställningar:

  • DOCKER_REGISTRY_SERVER_USERNAME
  • DOCKER_REGISTRY_SERVER_URL (Använd en fullständig URL. Till exempel: https://<server-name>.azurecr.io.)
  • DOCKER_REGISTRY_SERVER_PASSWORD(Aktivera administratörsåtkomst i Azure Container Registry inställningar.)

I konfigurationsfilen refererar du till din Azure Container Registry bild som i följande exempel:

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

Hur gör jag för att vet vilken container som är tillgänglig via Internet?

  • Du kan bara öppna en container för åtkomst.
  • Endast portarna 80 och 8080 är tillgängliga (exponerade portar).

Här följer reglerna för att avgöra vilken container som är tillgänglig (i prioritetsordning):

  • Programinställningen WEBSITES_WEB_CONTAINER_NAME inställd på containernamnet.
  • Den första containern som definierar port 80 eller 8080.
  • Om ingen av ovanstående regler är sant är den första containern som definierats i filen tillgänglig (exponerad).

Hur använder depends_onjag ?

App Service stöder inte alternativet depends_on och ignorerar det. Precis som i Dockers rekommendation om styrning av start och avstängning bör App Service-appar med flera containrar kontrollera beroenden i programkoden, både vid start och frånkoppling.

Följande exempelkod visar en Python-app som kontrollerar om en Redis-container körs:

          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)

Stöds WebSockets?

WebSockets stöds i Linux-appar. ARM-inställningen webSocketsEnabled gäller inte för Linux-appar eftersom WebSockets alltid är aktiverade för Linux.

Viktigt!

WebSockets stöds nu för Linux-appar i kostnadsfria App Service-planer. Du kan ha upp till fem WebSocket-anslutningar. Om den här gränsen överskrids resulterar det i ett HTTP 429-fel (för många begäranden).

Pris- och tjänstlicensavtal (SLA)

Vad är prissättningen nu när tjänsten är allmänt tillgänglig?

Prissättningen varierar beroende på SKU och region. Mer information finns på vår prissida: Priser för App Service.

Övriga frågor

Hur fungerar containerns uppvärmningsbegäran?

När App Service startar containern skickar uppvärmningsbegäran en HTTP-begäran till appens slutpunkt/robots933456.txt . Den här ändpunkten är en platshållare, men din applikation måste svara genom att returnera valfri statuskod (inklusive 5xx). Om din programlogik inte svarar genom att skicka en HTTP-statuskod till icke-existerande slutpunkter kan uppvärmningsbegäran inte ta emot något svar. Därför startas containern ständigt om.

Om du vill ändra det här standardbeteendet anpassar du sökvägen för warmup-slutpunkten och de statuskoder som avgör när webbplatsen anses vara uppvärmd. Ange programinställningarna för WEBSITE_WARMUP_PATH och WEBSITE_WARMUP_STATUSES .

Uppvärmningsbegäran kan också misslyckas på grund av felkonfiguration av porten.

Går det att öka tidsgränsen för containerns uppvärmningsbegäran?

Uppvärmningsbegäran misslyckas som standard efter att ha väntat i 240 sekunder på ett svar från containern. Du kan öka tidsgränsen för containerns uppvärmningsbegäran genom att lägga till programinställningen WEBSITES_CONTAINER_START_TIME_LIMIT med ett värde mellan 240 och 1 800 sekunder.

Hur anger jag porten i min Linux-container?

I följande tabell beskrivs hur du anger porten i din Linux-container:

Containertyp Description Så här ställer du in eller använder porten
Inbyggda containrar Om du väljer en språk-/ramverksversion för en Linux-app väljs en fördefinierad container åt dig. Om du vill peka appkoden till rätt port använder du PORT miljövariabeln.
Anpassade behållare Du har fullständig kontroll över containern. App Service har ingen kontroll över vilken port containern lyssnar på. Vad den behöver är att veta vilken port som begäranden ska vidarebefordras till. Om containern lyssnar på port 80 eller 8080 kan App Service identifiera den automatiskt. Om den lyssnar på någon annan port måste du ange appinställningen WEBSITES_PORT till portnumret och App Service vidarebefordrar begäranden till den porten i containern. Appinställningen WEBSITES_PORT har ingen effekt i containern och du kan inte komma åt den som en miljövariabel i containern.

Kan jag använda en filbaserad databas (till exempel SQLite) med min Linux-webbapp?

Filsystemet i ditt program är en monterad nätverksresurs. På så sätt kan du skala ut scenarier där koden måste köras över flera värdar. Detta blockerar dock användningen av filbaserade databasprovidrar som SQLite eftersom det inte går att hämta exklusiva lås på databasfilen. Använd en hanterad databastjänst som Azure SQL, Azure Database for MySQL eller Azure Database for PostgreSQL.

Vilka tecken stöds i namn på programinställningar?

Du kan bara använda bokstäver (A-Z, a-z), siffror (0-9) och understreckstecknet (_) för programinställningar.

Var kan jag begära nya funktioner?

Du kan skicka in din idé på feedbackforumet för Web Apps. Lägg till "[Linux]" i namnet på din idé.

Referenser