Redigera

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 när jag konfigurerar körningsstacken?

Stack 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)
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 PM2-konfigurationsfilen eller skriptfilen
.NET Core det kompilerade DLL-namnet som dotnet <myapp>.dll
PHP valfri anpassad start
Python valfritt startskript
Ruby 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.

Hantering

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.

Har du stöd för mellanlagringsmiljö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-resurs till 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. Om du uttryckligen anger WEBSITES_ENABLE_APP_SERVICE_STORAGE true aktiveras monteringen. Om du vill inaktivera monteringen när detta är inställt på sant måste du uttryckligen ange WEBSITES_ENABLE_APP_SERVICE_STORAGE falskt.

Det går inte att starta containern med "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 ange hur lång tid plattformen ska vänta innan den startar om containern. 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 http:// eller https://.

Vilket format har avbildningsnamnet i 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). Det går inte att ange bildnamn som använder en anpassad port 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-platsen 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-avslutning i delade klientdelar.

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. T.ex. I init.sh skriptet: 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_on stöds inte i App Service och ignoreras. Precis som rekommendationen för start och avstängning av kontroll från Docker bör App Service Multi-container-appar kontrollera beroenden via programkod – både vid start och frånkoppling. 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. webSocketsEnabled ARM-inställningen 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. Det här är helt enkelt en dummyslutpunkt, men ditt program måste svara med valfri statuskod som inte är 5XX. Om din programlogik inte svarar med någon HTTP-statuskod på obefintliga slutpunkter kan uppvärmningsbegäran inte ta emot något svar och den startar ständigt om containern. Uppvärmningsbegäran kan också misslyckas på grund av felkonfiguration av porten.

Se frågan Hur gör jag för att ange port i min Linux-container för att säkerställa att porten är korrekt konfigurerad i Azure App Services?

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 gör jag för att ange port 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 ange inställningen WEBSITES_PORT app 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. 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é.