Dela via


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

Kommentar

Var den här artikeln till hjälp? Dina indata är viktiga för oss. Använd feedbackknappen på den här sidan för att informera oss om hur bra den här artikeln fungerade för dig eller hur vi kan förbättra den.

Med lanseringen av App Service på Linux arbetar vi med att lägga till funktioner och göra förbättringar i vår plattform. Den här artikeln innehåller svar på frågor som våra kunder har ställt till oss nyligen.

Om du har en fråga kan du kommentera den här artikeln.

Inbyggda avbildningar

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

Stapel Förväntat värde
Java SE kommandot för att starta JAR-appen (till exempel java -jar /home/site/wwwroot/app.jar --server.port=80)
Hankatt 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 PM2-konfigurationsfilen eller skriptfilen
.NET Core det kompilerade DLL-namnet som dotnet <myapp>.dll
PHP valfri anpassad uppstart
python valfritt startskript
Rubin Ruby-skriptet som du vill initiera din app med

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

Ledning

Vad händer när jag trycker på omstartsknappen i Azure Portal?

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

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

Ja, du kan göra det via platsen för källkontrollhantering (SCM).

Kommentar

Du kan också ansluta till appcontainern direkt från din lokala utvecklingsdator med SSH, SFTP eller Visual Studio Code (för livefelsökning av Node.js-appar). Mer information finns i Remote debugging and SSH in App Service on Linux (Fjärrfelsökning och SSH i App Service på Linux).

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

Ange det reserverade fältet för apptjänsten till true.

Löpande integrering och distribution

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

Ja, för att konfigurera kontinuerlig integrering/distribution för Azure Container Registry eller DockerHub genom att följa Kontinuerlig distribution med Web App for Containers. För privata register kan du uppdatera containern genom att stoppa och sedan starta webbappen. Du kan också ändra eller lägga till en dummy-programinställning för att framtvinga en uppdatering av containern.

Stöder ni staging-miljöer?

Ja.

Kan jag använda "WebDeploy/MSDeploy" för att distribuera min webbapp?

Ja, du måste ange en appinställning som heter WEBSITE_WEBDEPLOY_USE_SCM false.

Git-distributionen av mitt program misslyckas när du använder Linux-webbappen. Hur kan jag kringgå problemet?

Om Git-distributionen misslyckas med linux-webbappen väljer du något av följande alternativ för att distribuera programkoden:

  • Använd funktionen Kontinuerlig leverans (förhandsversion): Du kan lagra appens källkod i en Azure DevOps Git-lagringsplats eller GitHub-lagringsplats för att använda Azure Continuous Delivery. Mer information finns i Konfigurera kontinuerlig leverans för Linux-webbapp.

  • Använd ZIP-distributions-API:et: Om du vill använda det här API:et går du till webbappen och går till mappen där du vill distribuera koden. Kör följande kod:

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

    Om du får ett felmeddelande om att curl kommandot inte hittas kontrollerar du att du installerar curl med hjälp apt-get install curl av innan du kör föregående curl kommando.

Språkstöd

Jag vill använda webb socketar i mitt Node.js-program, eventuella särskilda inställningar eller konfigurationer som ska ställas in?

Ja, inaktivera perMessageDeflate i Node.js kod på serversidan. Om du till exempel använder socket.io använder du 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 (tack vare förekomsten av en composer.lock-fil) och Kudu utlöser sedan en kompositörsinstallation.

Anpassade containrar

Kan jag använda hanterade identiteter med App Service när jag hämtar bilder från ACR?

Ja, den här funktionen är tillgänglig från Azure CLI. Du kan använda systemtilldelade eller användartilldelade identiteter. Den här funktionen stöds för närvarande inte i Azure Portal.

Jag använder min egen anpassade container. Jag vill att plattformen ska montera en SMB-share i katalogen /home/.

Om WEBSITES_ENABLE_APP_SERVICE_STORAGE inställningen är ospecificerad eller inställd på false/home/delas inte katalogen mellan skalningsinstanser och filer som skrivs bevaras inte i omstarter. Explicit inställning WEBSITES_ENABLE_APP_SERVICE_STORAGE till true aktiverar monteringen. Om du vill inaktivera monteringen när värdet är satt till sant måste du uttryckligen ange WEBSITES_ENABLE_APP_SERVICE_STORAGE till false.

Min container misslyckas med att starta 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 används ä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 BYOS (Bring Your Own Storage) resulterar det i startfel eller körningsundatag när diskutrymmesgränsen för värddisken överskrids.

Vi rekommenderar att du håller dina containeravbildningar så små som möjligt och skriver data till den beständiga lagringen eller BYOS när de körs i Linux App Service. Om det inte är möjligt måste du dela 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.

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 hela avbildningsnamnet, inklusive URL:en för det privata register (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?

Vi har inte stöd för att exponera fler än en port.

Kan jag ta med mitt eget lagringsutrymme?

Ja, bring your own storage är 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?

Nej, plattformen hanterar HTTPS-terminering i delade frontändar.

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

Ja, detta 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 som ska bindas på containern.

Kan jag använda ASPNETCORE_URLS i Docker-avbildningen?

Ja, skriv över miljövariabeln innan .NET Core-appen startar. I skriptet init.sh: exportera ASPNETCORE_URLS={Ditt värde}

Flera containrar med Docker Compose

Hur gör jag för att konfigurera Azure Container Registry (ACR) för användning med flera containrar?

För att kunna använda ACR med flera containrar måste alla containeravbildningar finnas på samma ACR-registerserver. När de finns på samma registerserver måste du skapa programinställningar och sedan uppdatera Docker Compose-konfigurationsfilen så att den innehåller ACR-avbildningsnamnet.

Skapa följande programinställningar:

  • DOCKER_REGISTRY_SERVER_USERNAME
  • DOCKER_REGISTRY_SERVER_URL (fullständig URL, till exempel ) https://<server-name>.azurecr.io
  • DOCKER_REGISTRY_SERVER_PASSWORD (aktivera administratörsåtkomst i ACR-inställningar)

I konfigurationsfilen refererar du till ACR-avbildningen 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?

  • Endast en container kan vara öppen för åtkomst
  • Endast port 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 inget av ovanstående är sant kommer den första containern som definierats i filen att vara tillgänglig (exponerad)

Hur gör jag för att använda depends_on?

Alternativet depends_onstöds inte i App Service och ignoreras. Precis som rekommendationen från Docker för kontroll av start och avstängning, bör App Service Multi-container-appar kontrollera beroenden genom programkoden – både vid start och avstängning. Exempelkoden nedan 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)

Web Sockets

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

Viktigt!

Web Sockets stöds nu för Linux-appar i kostnadsfria App Service-planer. Vi stöder upp till fem web socket-anslutningar i kostnadsfria App Service-planer. Om den här gränsen överskrids resulterar det i ett HTTP 429-svar (för många begäranden).

Priser och SLA

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

Priserna varierar beroende på SKU och region, men du kan se mer information på vår prissida: Priser för App Service.

Övriga frågor

Hur fungerar containerns uppvärmningsbegäran?

När Azure App Services startar containern skickar uppvärmningsbegäran en HTTP-begäran till slutpunkten /robots933456.txt för ditt program. Detta är helt enkelt en dummyslutpunkt, men ditt program måste svara genom att returnera någon 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 från standardbeteendet kan du anpassa sökvägen och statuskoderna för uppvärmningsslutpunkten som anser att webbplatsen är uppvärmd. Det gör du genom att ange programinställningarna för WEBSITE_WARMUP_PATH och WEBSITE_WARMUP_STATUSES .

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

Om du vill se till att porten är korrekt konfigurerad i Azure App Services läser du frågan Hur anger jag porten i min Linux-container?

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?

Behållartyp Beskrivning Så här ställer du in/använder port
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 miljövariabeln PORT.
Anpassade containrar 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 ställa in appinställningen WEBSITES_PORT till portnumret, och App Service vidarebefordrar begärandena till den porten i containern. Inställningen WEBSITES_PORT app 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. Tyvärr blockerar detta användningen av filbaserade databasprovidrar som SQLite eftersom det inte går att hämta exklusiva lås på databasfilen. Vi rekommenderar en hanterad databastjänst: 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é.