Veelgestelde vragen over Azure App Service op Linux

Opmerking

Was dit artikel nuttig? Uw inbreng is belangrijk voor ons. Gebruik de knop Feedback op deze pagina om ons te laten weten hoe goed dit artikel voor u heeft gewerkt of hoe we het kunnen verbeteren.

Met de release van App Service op Linux werken we aan het toevoegen van functies en het aanbrengen van verbeteringen aan ons platform. Dit artikel bevat antwoorden op vragen die onze klanten ons onlangs hebben gesteld.

Als u een vraag hebt, kunt u reageren op dit artikel.

Ingebouwde installatiekopieën

Ik wil de ingebouwde Docker-containers die het platform biedt, splitsen. Waar vind ik die bestanden?

U vindt alle Docker-bestanden op GitHub.

Wat zijn de verwachte waarden voor de sectie Opstartbestand wanneer ik de runtimestack configureer?

Stack Verwachte waarde
Java SE de opdracht om uw JAR-app te starten (bijvoorbeeld java -jar /home/site/wwwroot/app.jar --server.port=80)
Tomcat de locatie van een script voor het uitvoeren van de benodigde configuraties (bijvoorbeeld /home/site/deployments/tools/startup_script.sh)
Node.js het PM2-configuratiebestand of uw scriptbestand
.NET Core de gecompileerde DLL-naam als dotnet <myapp>.dll
PHP optioneel aangepast opstarten
Python optioneel opstartscript
Ruby het Ruby-script waarmee u uw app wilt initialiseren

Deze opdrachten of scripts worden uitgevoerd nadat de ingebouwde Docker-container is gestart, maar voordat de toepassingscode wordt gestart.

Beheer

Wat gebeurt er wanneer ik op de knop Opnieuw opstarten in de Azure Portal?

Deze actie is hetzelfde als bij het opnieuw opstarten van Docker.

Kan ik Secure Shell (SSH) gebruiken om verbinding te maken met de virtuele machine (VM) van de app-container?

Ja, u kunt dit doen via de SCM-site (Source Control Management).

Opmerking

U kunt ook rechtstreeks vanaf uw lokale ontwikkelcomputer verbinding maken met de app-container met behulp van SSH, SFTP of Visual Studio Code (voor live foutopsporing Node.js apps). Zie Externe foutopsporing en SSH in App Service op Linux voor meer informatie.

Hoe kan ik een Linux-App Service-plan maken via een SDK of een Azure Resource Manager-sjabloon?

Stel het gereserveerde veld van de App Service in op true.

Continue integratie en implementatie

Mijn web-app gebruikt nog steeds een oude Docker-containerinstallatiekopieën nadat ik de installatiekopieën op Docker Hub heb bijgewerkt. Ondersteunt u continue integratie en implementatie van aangepaste containers?

Ja, als u continue integratie/implementatie wilt instellen voor Azure Container Registry of DockerHub, volgt u Continue implementatie met web-app voor containers. Voor privéregisters kunt u de container vernieuwen door de web-app te stoppen en vervolgens te starten. U kunt ook een instelling voor een dummy-toepassing wijzigen of toevoegen om het vernieuwen van uw container af te dwingen.

Ondersteunt u faseringsomgevingen?

Ja.

Kan ik 'WebDeploy/MSDeploy' gebruiken om mijn web-app te implementeren?

Ja, u moet een app-instelling met de naam WEBSITE_WEBDEPLOY_USE_SCMonwaar instellen.

Git-implementatie van mijn toepassing mislukt wanneer u een Linux-web-app gebruikt. Hoe kan ik het probleem omzeilen?

Als git-implementatie naar uw Linux-web-app mislukt, kiest u een van de volgende opties om uw toepassingscode te implementeren:

  • De functie Continue levering (preview) gebruiken: U kunt de broncode van uw app opslaan in een Azure DevOps Git-opslagplaats of GitHub-opslagplaats om Azure Continuous Delivery te gebruiken. Zie Continue levering configureren voor Linux-web-app voor meer informatie.

  • De ZIP-implementatie-API gebruiken: als u deze API wilt gebruiken, SSH in uw web-app en gaat u naar de map waarin u de code wilt implementeren. Voer de volgende code uit:

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

    Als u een foutmelding krijgt dat de curl opdracht niet is gevonden, moet u curl installeren met voordat apt-get install curl u de vorige curl opdracht uitvoert.

Taalondersteuning

Ik wil websockets gebruiken in mijn Node.js toepassing, speciale instellingen of configuraties instellen?

Ja, schakel de perMessageDeflate Node.js code aan de serverzijde uit. Als u bijvoorbeeld socket.io gebruikt, gebruikt u de volgende code:

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

Ondersteunt u niet-gecompileerde .NET Core-apps?

Ja.

Ondersteunt u Composer als afhankelijkheidsmanager voor PHP-apps?

Ja, tijdens een Git-implementatie moet Kudu detecteren dat u een PHP-toepassing implementeert (dankzij de aanwezigheid van een composer.lock-bestand), waarna Kudu een composer-installatie activeert.

Aangepaste containers

Kan ik beheerde identiteiten gebruiken met App Service bij het ophalen van afbeeldingen uit ACR?

Ja, deze functionaliteit is beschikbaar via de Azure CLI. U kunt door het systeem toegewezen of door de gebruiker toegewezen identiteiten gebruiken. Deze functionaliteit wordt momenteel niet ondersteund in de Azure Portal.

Ik gebruik mijn eigen aangepaste container. Ik wil dat het platform een SMB-share koppelt aan de map /home/.

Als WEBSITES_ENABLE_APP_SERVICE_STORAGE de instelling niet is opgegeven of is ingesteld op onwaar, wordt de /home/ map niet gedeeld tussen schaalexemplaren en blijven de geschreven bestanden niet behouden bij opnieuw opstarten. Als u expliciet op true insteltWEBSITES_ENABLE_APP_SERVICE_STORAGE, wordt de koppeling ingeschakeld. Zodra dit is ingesteld op waar en u de koppeling wilt uitschakelen, moet u expliciet instellen WEBSITES_ENABLE_APP_SERVICE_STORAGE op onwaar.

Mijn container kan niet worden gestart met 'geen spatie meer op het apparaat'. Wat betekent deze fout?

App Service op Linux gebruikt twee verschillende typen opslag:

  • Bestandssysteemopslag: de bestandssysteemopslag is opgenomen in het quotum voor het App Service-abonnement. Deze wordt gebruikt wanneer bestanden worden opgeslagen in de permanente opslag die is geroot in de /home map.
  • Hostschijfruimte: de hostschijfruimte wordt gebruikt voor het opslaan van containerinstallatiekopieën. Het wordt beheerd door het platform via het docker-opslagstuurprogramma.

De hostschijfruimte staat los van het opslagquotum van het bestandssysteem. Het is niet uitbreidbaar en er is een limiet van 15 GB voor elk exemplaar. Deze wordt gebruikt om aangepaste installatiekopieën op de werkrol op te slaan. Mogelijk kunt u meer dan 15 GB gebruiken, afhankelijk van de exacte beschikbaarheid van de hostschijfruimte, maar dit is niet gegarandeerd.

Als de beschrijfbare laag van de container gegevens buiten de /home map of een gekoppeld Azure-opslagpad opslaat, wordt ook de hostschijfruimte verbruikt.

Het platform schoont regelmatig de schijfruimte van de host op om ongebruikte containers te verwijderen. Als de container een grote hoeveelheid gegevens buiten de /home map of Bring Your Own Storage (BYOS) schrijft, resulteert dit in opstartfouten of runtime-uitzonderingen zodra de limiet voor de hostschijfruimte is overschreden.

U wordt aangeraden uw containerinstallatiekopieën zo klein mogelijk te houden en gegevens naar de permanente opslag of BYOS te schrijven wanneer u op Linux App Service. Als dit niet mogelijk is, moet u het App Service-plan splitsen omdat de hostschijfruimte vast is en wordt gedeeld tussen alle containers in het App Service Plan.

Het duurt lang voordat mijn aangepaste container is gestart en het platform start de container opnieuw op voordat deze is opgestart.

U kunt configureren hoe lang het platform wacht voordat de container opnieuw wordt opgestart. Stel hiervoor de WEBSITES_CONTAINER_START_TIME_LIMIT app-instelling in op de gewenste waarde. De standaardwaarde is 230 seconden en de maximumwaarde is 1800 seconden.

Wat is de indeling voor de URL van de privéregisterserver?

Geef de volledige register-URL op, inclusief http:// of https://.

Wat is de indeling voor de naam van de installatiekopieën in de optie voor het privéregister?

Voeg de volledige naam van de installatiekopieën toe, inclusief de URL van het privéregister (bijvoorbeeld myacr.azurecr.io/dotnet:latest). Namen van afbeeldingen die een aangepaste poort gebruiken , kunnen niet worden ingevoerd via de portal. Gebruik het opdrachtregelprogramma om in azte stellendocker-custom-image-name.

Kan ik meer dan één poort op mijn aangepaste containerinstallatiekopieën weergeven?

We bieden geen ondersteuning voor het weergeven van meer dan één poort.

Kan ik mijn eigen opslag meenemen?

Ja, Bring Your Own Storage is in preview.

Waarom kan ik niet bladeren door het bestandssysteem van mijn aangepaste container of het uitvoeren van processen vanaf de SCM-site?

De SCM-site wordt uitgevoerd in een afzonderlijke container. U kunt het bestandssysteem of actieve processen van de app-container niet controleren.

Moet ik HTTPS implementeren in mijn aangepaste container?

Nee, het platform verwerkt HTTPS-beëindiging aan de gedeelde front-ends.

Moet ik WEBSITES_PORT gebruiken voor aangepaste containers?

Ja, dit is vereist voor aangepaste containers. Als u een aangepaste poort handmatig wilt configureren, gebruikt u de INSTRUCTIE EXPOSE in het Dockerfile en de app-instelling, WEBSITES_PORT, met een poortwaarde die moet worden gekoppeld aan de container.

Kan ik ASPNETCORE_URLS gebruiken in de Docker-installatiekopieën?

Ja, overschrijf de omgevingsvariabele voordat de .NET Core-app wordt gestart. Bijvoorbeeld in het init.sh script: export ASPNETCORE_URLS={Your value}

Meerdere containers met Docker Compose

Hoe kan ik Azure Container Registry (ACR) configureren voor gebruik met meerdere containers?

Als u ACR wilt gebruiken met meerdere containers, moeten alle containerinstallatiekopieën worden gehost op dezelfde ACR-registerserver. Zodra ze zich op dezelfde registerserver bevinden, moet u toepassingsinstellingen maken en vervolgens het Docker Compose-configuratiebestand bijwerken met de naam van de ACR-installatiekopieën.

Maak de volgende toepassingsinstellingen:

  • DOCKER_REGISTRY_SERVER_USERNAME
  • DOCKER_REGISTRY_SERVER_URL (volledige URL, bijvoorbeeld: https://<server-name>.azurecr.io)
  • DOCKER_REGISTRY_SERVER_PASSWORD (beheerderstoegang inschakelen in ACR-instellingen)

Verwijs in het configuratiebestand naar uw ACR-installatiekopieën, zoals in het volgende voorbeeld:

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

Hoe kan ik weet welke container toegankelijk is voor internet?

  • Er kan slechts één container open zijn voor toegang
  • Alleen poort 80 en 8080 is toegankelijk (beschikbare poorten)

Dit zijn de regels om te bepalen welke container toegankelijk is, in volgorde van prioriteit:

  • Toepassingsinstelling WEBSITES_WEB_CONTAINER_NAME ingesteld op de containernaam
  • De eerste container om poort 80 of 8080 te definiëren
  • Als geen van de bovenstaande waarden waar is, is de eerste container die in het bestand is gedefinieerd toegankelijk (beschikbaar)

Hoe kan ik depends_on gebruiken?

De depends_on optie wordt niet ondersteund op App Service en wordt genegeerd. Net als de aanbeveling voor het opstarten en afsluiten van besturingselementen van Docker, moeten App Service Apps met meerdere containers afhankelijkheden controleren via toepassingscode, zowel bij het opstarten als bij het verbreken van de verbinding. In de onderstaande voorbeeldcode ziet u een Python-app die controleert of er een Redis-container wordt uitgevoerd.

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 worden ondersteund in Linux-apps. De webSocketsEnabled ARM-instelling is niet van toepassing op Linux-apps, omdat websockets altijd zijn ingeschakeld voor Linux.

Belangrijk

WebSockets worden nu ondersteund voor Linux-apps in gratis App Service-abonnementen. We ondersteunen maximaal vijf websockets voor gratis App Service-abonnementen. Als u deze limiet overschrijdt, resulteert dit in een HTTP 429-antwoord (te veel aanvragen).

Prijzen en SLA

Wat zijn de prijzen, nu de service algemeen beschikbaar is?

Prijzen verschillen per SKU en regio, maar u kunt meer informatie bekijken op onze pagina met prijzen: App Service Prijzen.

Overige vragen

Hoe werkt de containerwarmeraanvraag?

Wanneer Azure-app Services uw container start, verzendt de warmup-aanvraag een HTTP-aanvraag naar het /robots933456.txt-eindpunt van uw toepassing. Dit is gewoon een dummy-eindpunt, maar uw toepassing moet reageren met een niet-5XX-statuscode. Als uw toepassingslogica niet reageert met HTTP-statuscode voor niet-bestaande eindpunten, kan de warmup-aanvraag geen antwoord ontvangen en wordt de container permanent opnieuw opgestart. De warmup-aanvraag kan ook mislukken vanwege een onjuiste configuratie van de poort.

Als u wilt controleren of de poort correct is geconfigureerd op Azure-app Services, raadpleegt u de vraag Hoe kan ik poort opgeven in mijn Linux-container?

Is het mogelijk om de time-out van de containerwarmeraanvraag te verhogen?

De opwarmaanvraag mislukt standaard na 240 seconden te hebben gewacht op een antwoord van de container. U kunt de time-out van de containerwarmupaanvraag verhogen door de toepassingsinstelling toe te voegen WEBSITES_CONTAINER_START_TIME_LIMIT met een waarde tussen 240 en 1800 seconden.

Hoe kan ik poort opgeven in mijn Linux-container?

Containertype Omschrijving Poort instellen/gebruiken
Ingebouwde containers Als u een taal/framework-versie voor een Linux-app selecteert, wordt een vooraf gedefinieerde container voor u geselecteerd. Als u uw app-code naar de juiste poort wilt verwijzen, gebruikt u de omgevingsvariabele POORT.
Aangepaste containers U hebt volledige controle over de container. App Service heeft geen controle over op welke poort uw container luistert. Wat het wel nodig heeft, is te weten naar welke poort aanvragen moeten worden doorgestuurd. Als uw container luistert naar poort 80 of 8080, kan App Service deze automatisch detecteren. Als er naar een andere poort wordt geluisterd, moet u de instelling WEBSITES_PORT app instellen op het poortnummer en App Service aanvragen doorsturen naar die poort in de container. De WEBSITES_PORT app-instelling heeft geen effect binnen de container en u kunt deze niet openen als een omgevingsvariabele in de container.

Kan ik een database op basis van bestanden (zoals SQLite) gebruiken met mijn Linux-web-app?

Het bestandssysteem van uw toepassing is een gekoppelde netwerkshare. Dit maakt uitschaalscenario's mogelijk waarbij uw code moet worden uitgevoerd op meerdere hosts. Helaas blokkeert dit het gebruik van databaseproviders op basis van bestanden, zoals SQLite, omdat het niet mogelijk is om exclusieve vergrendelingen op het databasebestand te verkrijgen. We raden een beheerde databaseservice aan: Azure SQL, Azure Database for MySQL of Azure Database for PostgreSQL

Wat zijn de ondersteunde tekens in namen van toepassingsinstellingen?

U kunt alleen letters (A-Z, a-z), cijfers (0-9) en het onderstrepingsteken (_) gebruiken voor toepassingsinstellingen.

Waar kan ik nieuwe functies aanvragen?

U kunt uw idee indienen op het Web Apps feedbackforum. Voeg '[Linux]' toe aan de titel van uw idee.