Note
Questo articolo è stato utile? Diamo importanza al contributo degli utenti. Usare il pulsante Feedback in questa pagina per comunicare se questo articolo è stato utile o come possiamo migliorarlo.
Con il lancio del Servizio app in Linux, sono previsti miglioramenti e nuove funzionalità per la piattaforma. Questo articolo fornisce le risposte alle domande che i clienti ci hanno posto di recente.
In caso di domande, inviare commenti su questo articolo.
Immagini predefinite
Quali sono i valori previsti per la sezione relativa al file di avvio quando si configura lo stack di runtime?
Questi comandi o script vengono eseguiti dopo l'avvio del contenitore Docker predefinito, ma prima dell'avvio del codice dell'applicazione.
Gestione
Cosa accade quando viene premuto il pulsante di riavvio nel portale di Azure?
Questa azione equivale a un riavvio di Docker.
È possibile usare Secure Shell (SSH) per connettersi alla macchina virtuale (VM) del contenitore dell'app?
Sì, è possibile farlo tramite il sito di gestione controllo del codice sorgente.
Note
È anche possibile connettersi al contenitore di app direttamente dal computer di sviluppo locale tramite SSH, SFTP o Visual Studio Code (per eseguire il debug attivo di app Node.js). Per altre informazioni, vedere Remote debugging and SSH in App Service on Linux (Debug remoto e SHH nel servizio app in Linux).
Come è possibile creare un piano di servizio app Linux tramite un SDK o un modello di Azure Resource Manager?
Impostare il campo riservato del servizio app su true.
Integrazione e distribuzione continue
L'app Web usa ancora un'immagine obsoleta del contenitore Docker dopo l'aggiornamento dell'immagine su DockerHub. È supportata l'integrazione e distribuzione continua di contenitori personalizzati?
Sì, per configurare l'integrazione o la distribuzione continua per Registro Azure Container o le immagini di DockerHub, vedere Distribuzione continua con l'app Web per contenitori. Per registri privati, è possibile aggiornare il contenitore arrestando e riavviando l'app Web. Oppure è possibile modificare o aggiungere un'impostazione dell'applicazione fittizia per forzare l'aggiornamento del contenitore.
Gli ambienti di gestione temporanea sono supportati?
Sì.
È possibile usare "WebDeploy/MSDeploy" per distribuire l'app Web?
Sì, è necessario impostare WEBSITE_WEBDEPLOY_USE_SCM
nell'app su false.
La distribuzione in GIT dell'applicazione non riesce quando si usa l'app Web di Linux. Come è possibile risolvere il problema?
Se la distribuzione in GIT non riesce per l'app Web di Linux, scegliere una delle opzioni seguenti per distribuire il codice dell'applicazione:
Usare la funzionalità Recapito continuo (anteprima): è possibile archiviare il codice sorgente dell'app in un repository Git di Azure DevOps o in un repository GitHub per usare il recapito continuo di Azure. Per altre informazioni, vedere How to configure Continuous Delivery for Linux web app (Come configurare Recapito continuo per app Web in Linux).
Usare l'API per la distribuzione di ZIP: per usare questa API, attivare una connessione SSH nell'app Web e passare alla cartella in cui si vuole distribuire il codice. Eseguire il codice seguente:
curl -X POST -u <user> --data-binary @<zipfile> https://{your-sitename}.scm.azurewebsites.net/api/zipdeploy
Se si verifica un errore che indica l'impossibilità di trovare il comando
curl
, assicurarsi di installare curl tramiteapt-get install curl
prima di eseguire il comandocurl
precedente.
Supporto di versioni in lingue diverse
Esistono impostazioni speciali o configurazioni specifiche da impostare se si vogliono usare Web Socket nell'applicazione Node.js?
Sì, disabilitare perMessageDeflate
nel codice Node.js sul lato server. Ad esempio, per socket.io usare il codice seguente:
const io = require('socket.io')(server,{
perMessageDeflate :false
});
È presente il supporto per le app .NET Core non compilate?
Sì.
È previsto il supporto per lo strumento Composer come gestore delle dipendenze per le app PHP?
Sì, durante una distribuzione Git, Kudu rileverà che si sta distribuendo un'applicazione PHP (grazie alla presenza di un file composer.lock) e Kudu attiverà l'installazione di Composer.
Contenitori personalizzati
È possibile usare identità gestite con servizio app durante il pull delle immagini in Registro Azure Container?
Sì, questa funzionalità è disponibile dall'interfaccia della riga di comando di Azure. È possibile usare identità assegnate dal sistema o assegnate dall'utente . Questa funzionalità non è attualmente supportata nella portale di Azure.
Uso un contenitore personalizzato. Si vuole che la piattaforma supporti una condivisione SMB nella directory "/home/".
Se WEBSITES_ENABLE_APP_SERVICE_STORAGE
l'impostazione non è specificata o impostata su false, la /home/
directory non verrà condivisa tra istanze di scalabilità e i file scritti non verranno mantenuti tra i riavvii. Se si imposta in modo esplicito su WEBSITES_ENABLE_APP_SERVICE_STORAGE
true , il montaggio verrà abilitato. Dopo aver impostato su true, se si vuole disabilitare il montaggio, è necessario impostare in modo esplicito su WEBSITES_ENABLE_APP_SERVICE_STORAGE
false.
L'avvio del contenitore non riesce con "nessun spazio lasciato nel dispositivo". Cosa significa l'errore
servizio app in Linux usa due diversi tipi di archiviazione:
- Archiviazione del file system: l'archiviazione del file system è inclusa nella quota del piano di servizio app. Viene usato quando i file vengono salvati nella risorsa di archiviazione permanente radicata nella
/home
directory. - Spazio su disco host: lo spazio su disco host viene usato per archiviare le immagini del contenitore. Viene gestito dalla piattaforma tramite il driver di archiviazione Docker.
Lo spazio su disco host è separato dalla quota di archiviazione del file system. Non è espandibile ed è previsto un limite di 15 GB per ogni istanza. Viene usato per archiviare tutte le immagini personalizzate nel ruolo di lavoro. È possibile usare dimensioni superiori a 15 GB a seconda della disponibilità esatta dello spazio su disco host, ma questo non è garantito.
Se il livello scrivibile del contenitore salva i dati all'esterno della /home
directory o un percorso di archiviazione di Azure montato, verrà usato anche lo spazio su disco host.
La piattaforma pulisce regolarmente lo spazio su disco host per rimuovere i contenitori inutilizzati. Se il contenitore scrive una grande quantità di dati all'esterno della /home
directory o Bring Your Own Storage (BYOS), genererà errori di avvio o eccezioni di runtime dopo il superamento del limite di spazio su disco host.
È consigliabile mantenere le immagini del contenitore il più piccolo possibile e scrivere dati nell'archiviazione permanente o BYOS durante l'esecuzione in Linux servizio app. Se non è possibile, è necessario dividere il piano di servizio app perché lo spazio su disco host è fisso e condiviso tra tutti i contenitori nel piano di servizio app.
L'avvio del contenitore personalizzato richiede molto tempo e la piattaforma riavvia il contenitore prima del completamento di questa operazione. Come si risolve il problema?
È possibile configurare il tempo di attesa della piattaforma prima del riavvio del contenitore. A tale scopo impostare WEBSITES_CONTAINER_START_TIME_LIMIT
nell'app sul valore desiderato. Il valore predefinito è 230 secondi e il valore massimo è 1800 secondi.
Qual è il formato dell'URL del server del Registro di sistema privato?
È necessario immettere l'URL completo del registro, incluso http://
o https://
.
Qual è il formato per il nome dell'immagine nell'opzione del Registro di sistema privato?
Aggiungere il nome dell'immagine completa, incluso l'URL del registro privato (ad esempio myacr.azurecr.io/dotnet:latest). I nomi di immagine che usano una porta personalizzata non possono essere inseriti tramite il portale. Per impostare docker-custom-image-name
usare lo az
strumento dalla riga di comando.
È possibile esporre più di una porta sull'immagine del contenitore personalizzato?
Non è supportata l'esposizione di più porte.
È possibile usare la propria archiviazione?
Sì, l'opzione che consente di usare la propria archiviazione è disponibile in anteprima.
Perché non è possibile accedere al file system del contenitore personalizzato o ai processi in esecuzione dal sito SCM?
Il sito SCM viene eseguito in un contenitore separato. Non è possibile controllare il file system o i processi in esecuzione del contenitore dell'app.
È necessario implementare HTTPS nel contenitore personalizzato?
No, la piattaforma gestisce l'interruzione HTTPS a livello dei server front-end condivisi.
È necessario usare WEBSITES_PORT per i contenitori personalizzati?
Sì, questa operazione è necessaria per i contenitori personalizzati. Per configurare manualmente una porta personalizzata, usare l'istruzione EXPOSE nel Dockerfile e l'impostazione dell'app, WEBSITES_PORT, con un valore di porta da associare nel contenitore.
È possibile usare ASPNETCORE_URLS nell'immagine Docker?
Sì, sovrascrivere la variabile di ambiente prima dell'avvio dell'app .NET Core. Ad esempio, nello script di init.sh: esportazione ASPNETCORE_URLS={Valore}
Multi-contenitore con Docker Compose
Come si configura Registro Azure Container da usare con più contenitori?
Per usare Registro Azure Container con più contenitori, tutte le immagini del contenitore devono essere ospitate nello stesso server di Registro Azure Container. Una volta che si trovano nello stesso server del Registro di sistema, sarà necessario creare le impostazioni dell'applicazione e quindi aggiornare il file di configurazione Docker Compose per includere il nome dell'immagine del Registro Azure Container.
Definire le impostazioni dell'applicazione seguenti:
- DOCKER_REGISTRY_SERVER_USERNAME
- DOCKER_REGISTRY_SERVER_URL (URL completo, ad esempio :
https://<server-name>.azurecr.io
) - DOCKER_REGISTRY_SERVER_PASSWORD (abilitare l'accesso di amministratore nelle impostazioni di Registro Azure Container)
Nel file di configurazione fare riferimento all'immagine di Registro Azure Container come nell'esempio seguente:
image: <server-name>.azurecr.io/<image-name>:<tag>
Come è possibile sapere quale il contenitore è accessibile tramite Internet?
- Solo un contenitore può essere aperto per l'accesso
- Solo le porte 80 e 8080 sono accessibili (porte esposte)
Di seguito vengono indicate le regole per determinare quale contenitore è accessibile (in ordine di precedenza):
- Impostazione dell'applicazione
WEBSITES_WEB_CONTAINER_NAME
definita sul nome del contenitore - Il primo contenitore definito dalla porta 80 o 8080
- Se nessuna delle condizioni precedenti è soddisfatta, il primo contenitore definito nel file sarà accessibile (esposto)
Ricerca per categorie usare depends_on?
L'opzione depends_on
non è supportata in servizio app e verrà ignorata. Proprio come la raccomandazione di avvio e arresto del controllo da Docker, servizio app le app multi-contenitore devono controllare le dipendenze tramite il codice dell'applicazione, sia all'avvio che alla disconnessione.
Il codice di esempio seguente mostra un controllo dell'app Python per verificare se un contenitore Redis è in esecuzione.
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)
WebSocket
I Web Socket sono supportati nelle app Linux. L'impostazione webSocketsEnabled
arm non si applica alle app Linux perché i Web Socket sono sempre abilitati per Linux.
Importante
I Web Socket sono ora supportati per le app Linux nei piani di servizio app gratuito. Sono supportate fino a cinque connessioni Web Socket nei piani free servizio app. Il superamento di questo limite comporta una risposta HTTP 429 (troppe richieste).
Prezzi e contratto di servizio
Qual è il piano tariffario ora che il servizio è generalmente disponibile?
I prezzi variano in base allo SKU e all'area, ma è possibile visualizzare altri dettagli nella pagina dei prezzi: servizio app Prezzi.
Altre domande
Come funziona la richiesta di riscaldamento del contenitore?
Quando app Azure Services avvia il contenitore, la richiesta di riscaldamento invia una richiesta HTTP all'endpoint /robots933456.txt dell'applicazione. Si tratta semplicemente di un endpoint fittizio, ma l'applicazione deve rispondere con qualsiasi codice di stato non 5XX. Se la logica dell'applicazione non risponde con codice di stato HTTP a endpoint inesistenti, la richiesta di riscaldamento non può ricevere una risposta e riavvia in modo perpetuo il contenitore. La richiesta di riscaldamento potrebbe anche non riuscire a causa di errori di configurazione della porta.
Per assicurarsi che la porta sia configurata correttamente in app Azure Services, vedere la domanda Ricerca per categorie specificare la porta nel contenitore Linux?
È possibile aumentare il timeout della richiesta di riscaldamento del contenitore?
La richiesta di riscaldamento per impostazione predefinita ha esito negativo dopo l'attesa di 240 secondi per una risposta dal contenitore. È possibile aumentare il timeout della richiesta di riscaldamento del contenitore aggiungendo l'impostazione WEBSITES_CONTAINER_START_TIME_LIMIT
dell'applicazione con un valore compreso tra 240 e 1800 secondi.
Ricerca per categorie specificare la porta nel contenitore Linux?
Tipo di contenitore | Descrizione | Come impostare/usare la porta |
---|---|---|
Contenitori predefiniti | Se si seleziona una versione del linguaggio/framework per un'app Linux, viene selezionato automaticamente un contenitore predefinito. | Per puntare il codice dell'app alla porta corretta, usare la variabile di ambiente PORT. |
Contenitori personalizzati | Si ha il controllo completo sul contenitore. | servizio app non ha alcun controllo sulla porta su cui il contenitore è in ascolto. Ciò che serve è sapere a quale porta inoltrare le richieste. Se il contenitore è in ascolto della porta 80 o 8080, servizio app è in grado di rilevarlo automaticamente. Se è in ascolto di qualsiasi altra porta, è necessario impostare l'impostazione dell'app WEBSITES_PORT sul numero di porta e servizio app inoltra le richieste a tale porta nel contenitore. L'impostazione dell'app WEBSITES_PORT non ha alcun effetto all'interno del contenitore e non è possibile accedervi come variabile di ambiente all'interno del contenitore. |
È possibile usare un database basato su file (ad esempio SQLite) con l'app Web Linux?
Il file system dell'applicazione è una condivisione di rete montata. In questo modo è possibile aumentare le istanze degli scenari in cui il codice deve essere eseguito in più host. Purtroppo questo blocca l'uso di provider di database basati su file come SQLite poiché non è possibile acquisire blocchi esclusivi nel file di database. È consigliabile un servizio di database gestito: Azure SQL, Database di Azure per MySQL o Database di Azure per PostgreSQL
Quali sono i caratteri supportati nei nomi delle impostazioni dell'applicazione?
Per le impostazioni dell'applicazione è possibile usare solo lettere (A-Z, a-z), numeri (0-9) e il carattere di sottolineatura (_).
Dove è possibile richiedere nuove funzionalità?
È possibile inviare l'idea al forum dei commenti App Web. Aggiungere "[Linux]" al titolo dell'idea.
Passaggi successivi
- Che cos'è il Servizio app di Azure in Linux?
- Configurare gli ambienti di gestione temporanea in Servizio app di Azure
- Distribuzione continua con l'app Web per contenitori
- Aspetti da conoscere: App Web e Linux
- Informazioni di riferimento sulle variabili di ambiente e impostazioni dell'app
Contattaci per ricevere assistenza
In caso di domande o bisogno di assistenza, creare una richiesta di supporto tecnico oppure formula una domanda nel Supporto della community di Azure. È possibile anche inviare un feedback sul prodotto al feedback della community di Azure.