Notitie
Was dit artikel nuttig? Uw input 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 commentaar geven op dit artikel.
Ingebouwde installatiekopieën
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 het 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 druk in Azure Portal?
Deze actie is hetzelfde als het opnieuw opstarten van Docker.
Kan ik Secure Shell (SSH) gebruiken om verbinding te maken met de virtuele machine van de app-container (VM)?
Ja, dat kunt u doen via de SCM-site (Source Control Management).
Notitie
U kunt ook rechtstreeks vanaf uw lokale ontwikkelcomputer verbinding maken met de app-container via SSH, SFTP of Visual Studio Code (voor live foutopsporing gebruikt u Node.js-apps). Zie Foutopsporing op afstand en SSH in App Service in 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 maakt nog steeds gebruik van een oude Docker-containerinstallatiekopieën nadat ik de installatiekopieën in Docker Hub heb bijgewerkt. Ondersteunt u continue integratie en implementatie van aangepaste containers?
Ja, om continue integratie/implementatie in te stellen voor Azure Container Registry of DockerHub door continue implementatie te volgen met Web App for Containers. Voor privéregisters kunt u de container vernieuwen door uw web-app te stoppen en vervolgens te starten. U kunt ook een dummytoepassingsinstelling wijzigen of toevoegen om een vernieuwing 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 instellen die is aangeroepen WEBSITE_WEBDEPLOY_USE_SCM
op false.
De Git-implementatie van mijn toepassing mislukt bij het gebruik van een Linux-web-app. Hoe kan ik het probleem omzeilen?
Als de Git-implementatie mislukt in uw Linux-web-app, kiest u een van de volgende opties om uw toepassingscode te implementeren:
Gebruik de functie Continue levering (preview): u kunt de broncode van uw app opslaan in een Azure DevOps Git-opslagplaats of GitHub-opslagplaats om Continue levering van Azure te gebruiken. Zie Continue levering voor Linux-web-app configureren voor meer informatie.
Gebruik de ZIP deploy-API: Als u deze API wilt gebruiken, gaat u met SSH naar uw web-app en gaat u naar de map waarin u uw 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 wordt gevonden, moet u curl installeren met behulp vanapt-get install curl
voordat u de vorigecurl
opdracht uitvoert.
Taalondersteuning
Ik wil websockets gebruiken in mijn Node.js toepassing, eventuele speciale instellingen of configuraties die moeten worden ingesteld?
Ja, schakel perMessageDeflate
de 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 in 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 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 over schaalexemplaren en blijven de geschreven bestanden niet behouden tijdens het opnieuw opstarten. Als u expliciet instelt WEBSITES_ENABLE_APP_SERVICE_STORAGE
op True , wordt de koppeling ingeschakeld. Zodra dit is ingesteld op true, moet u, als u de koppeling wilt uitschakelen, expliciet ingesteld WEBSITES_ENABLE_APP_SERVICE_STORAGE
op onwaar.
Mijn container kan niet worden gestart met 'geen ruimte meer over op apparaat'. Wat betekent deze fout?
App Service op Linux gebruikt twee verschillende typen opslag:
- Bestandssysteemopslag: De bestandssysteemopslag is opgenomen in het quotum van het App Service-plan. 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 schijfruimte van de host 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 voor het opslaan van aangepaste installatiekopieën op de werkrol. 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 de schijfruimte van de host ook verbruikt.
Het platform schoont de hostschijfruimte regelmatig 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 deze in opstartfouten of runtime-uitzonderingen zodra de limiet voor de schijfruimte van de host is overschreden.
U wordt aangeraden uw containerinstallatiekopieën zo klein mogelijk te houden en gegevens naar de permanente opslag of BYOS te schrijven wanneer ze worden uitgevoerd in Linux App Service. Als dit niet mogelijk is, moet u het App Service-plan splitsen omdat de schijfruimte van de host is vastgezet en 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 uw container opnieuw wordt opgestart. Hiervoor stelt u 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 installatiekopieënnaam toe, inclusief de privéregister-URL (bijvoorbeeld myacr.azurecr.io/dotnet:latest). Namen van installatiekopieën die een aangepaste poort gebruiken, kunnen niet worden ingevoerd via de portal. Als u wilt instellen docker-custom-image-name
, gebruikt u het az
opdrachtregelprogramma.
Kan ik meer dan één poort beschikbaar maken op mijn aangepaste containerinstallatiekopieën?
We bieden geen ondersteuning voor het beschikbaar maken van meer dan één poort.
Kan ik mijn eigen opslag meenemen?
Ja, Bring Your Own Storage is in preview.
Waarom kan ik niet door het bestandssysteem van mijn aangepaste container bladeren of processen uitvoeren vanaf de SCM-site?
De SCM-site wordt uitgevoerd in een afzonderlijke container. U kunt het bestandssysteem of de 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 handmatig een aangepaste poort wilt configureren, gebruikt u de instructie EXPOSE in het Dockerfile en de app-instelling, WEBSITES_PORT, met een poortwaarde om verbinding te maken met 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: ASPNETCORE_URLS={Uw waarde} exporteren
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 om de naam van de ACR-installatiekopieën op te nemen.
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 weten welke container toegankelijk is voor internet?
- Er kan slechts één container worden geopend voor toegang
- Alleen poort 80 en 8080 is toegankelijk (beschikbare poorten)
Hier volgen de regels voor het bepalen van welke container toegankelijk is, in de volgorde van prioriteit:
- Toepassingsinstelling ingesteld
WEBSITES_WEB_CONTAINER_NAME
op de containernaam - De eerste container voor het definiëren van poort 80 of 8080
- Als geen van de bovenstaande waar is, is de eerste container die in het bestand is gedefinieerd, toegankelijk (beschikbaar gemaakt)
Hoe kan ik depends_on gebruiken?
De depends_on
optie wordt niet ondersteund in App Service en wordt genegeerd. Net als de aanbeveling voor het opstarten en afsluiten van het besturingselement van Docker, moeten App Service-apps met meerdere containers afhankelijkheden controleren via toepassingscode, zowel bij het opstarten als de verbinding verbreken.
In de onderstaande voorbeeldcode ziet u een Python-app die controleert of 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
Web Sockets worden ondersteund in Linux-apps. De webSocketsEnabled
ARM-instelling is niet van toepassing op Linux-apps, omdat Web Sockets altijd zijn ingeschakeld voor Linux.
Belangrijk
Web Sockets worden nu ondersteund voor Linux-apps in gratis App Service-abonnementen. We ondersteunen maximaal vijf websocketverbindingen in gratis App Service-abonnementen. Het overschrijden van deze limiet resulteert in een HTTP 429-antwoord (Te veel aanvragen).
Prijzen en SLA
Wat zijn de prijzen, nu de service algemeen beschikbaar is?
Prijzen variëren per SKU en regio, maar u kunt meer informatie bekijken op onze pagina met prijzen: App Service-prijzen.
Andere vragen
Hoe werkt de aanvraag voor het opwarmen van containers?
Wanneer Azure-app Services uw container start, verzendt de opwarmaanvraag 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 geen HTTP-statuscode beantwoordt aan niet-bestaande eindpunten, kan de opwarmaanvraag geen antwoord ontvangen en wordt uw container permanent opnieuw opgestart. De opwarmaanvraag kan ook mislukken vanwege een onjuiste configuratie van de poort.
Zie de vraag Hoe kan ik poort in mijn Linux-container opgeeft om ervoor te zorgen dat de poort correct is geconfigureerd voor Azure-app Services?
Is het mogelijk om de time-out van de aanvraag voor het opwarmen van containers te verhogen?
De opwarmaanvraag mislukt standaard na 240 seconden wachten op een antwoord van de container. U kunt de time-out van de aanvraag voor het opwarmen van containers verhogen door de toepassingsinstelling WEBSITES_CONTAINER_START_TIME_LIMIT
toe te voegen met een waarde tussen 240 en 1800 seconden.
Hoe kan ik poort opgeven in mijn Linux-container?
Containertype | Beschrijving | Poort instellen/gebruiken |
---|---|---|
Ingebouwde containers | Als u een taal-/frameworkversie voor een Linux-app selecteert, wordt er een vooraf gedefinieerde container voor u geselecteerd. | Als u de app-code naar de juiste poort wilt laten verwijzen, gebruikt u de omgevingsvariabele PORT. |
Aangepaste containers | U hebt volledige controle over de container. | App Service heeft geen controle over de poort waarop 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 van de WEBSITES_PORT app instellen op het poortnummer en stuurt App Service aanvragen door 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. Hierdoor kunnen scenario's worden uitgeschaald waarin 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.
Volgende stappen
- Wat is Azure-app Service in Linux?
- Faseringsomgevingen in Azure App Service instellen
- Continue implementatie met Web App for Containers
- Dingen die u moet weten: Web Apps en Linux
- Naslaginformatie over omgevingsvariabelen en app-instellingen
Contacteer ons voor hulp
Als u vragen hebt of hulp nodig hebt, maak een ondersteuningsaanvraag of vraag de Azure-communityondersteuning. U kunt ook productfeedback verzenden naar de Azure-feedbackcommunity.