Compartir a través de


Peguntas más frecuentes sobre Azure App Service en Linux

Nota:

¿Le resultó útil este artículo? Su opinión es importante para nosotros. Use el botón Comentarios de esta página para indicarnos lo bien que ha funcionado este artículo o cómo podemos mejorarlo.

Con el lanzamiento de App Service en Linux, estamos trabajando en incorporar características y realizar mejoras en nuestra plataforma. Este artículo proporciona respuestas a preguntas que nuestros clientes nos han formulado recientemente.

Si tiene alguna pregunta, comente este artículo.

Imágenes integradas

¿Cuáles son los valores esperados para la sección del archivo de inicio cuando configuro la pila de tiempo de ejecución?

Pila Valor esperado
Java SE Comando para iniciar la aplicación JAR (por ejemplo, java -jar /home/site/wwwroot/app.jar --server.port=80)
Gato Ubicación de un script para realizar las configuraciones necesarias (por ejemplo, /home/site/deployments/tools/startup_script.sh)
Node.js. El archivo de configuración de PM2 o el archivo de script.
.NET Core Nombre del archivo DLL compilado como dotnet <myapp>.dll.
PHP inicio personalizado opcional
Pitón script de inicio opcional
Rubí Script de Ruby con el que quiere inicializar la aplicación.

Estos comandos o scripts se ejecutan después de que se inicie el contenedor de Docker integrado, pero antes de que se inicie el código de la aplicación.

Administración

¿Qué ocurre al hacer clic en botón de reinicio de Azure Portal?

Esta acción es igual a un reinicio de Docker.

¿Puedo usar Secure Shell (SSH) para conectarme a la máquina virtual del contenedor de la aplicación?

Sí, puede hacerlo a través del sitio de administración de control de código fuente (SCM).

Nota:

También puede conectarse al contenedor de la aplicación directamente desde su máquina de desarrollo local mediante SSH, SFTP, o Visual Studio Code (para depuración en vivo de aplicaciones Node.js). Para obtener más información, consulte Depuración remota y SSH en el App Service en Linux.

¿Cómo se puede crear un plan de App Service en Linux a través de un SDK o una plantilla de Azure Resource Manager?

Establezca el campo reservado del servicio de aplicación en true.

Integración e implementación continuas

Mi aplicación web sigue usando una imagen de contenedor de Docker antigua después de actualizar la imagen en Docker Hub. ¿Se admite la integración e implementación continuas de contenedores personalizados?

Sí, para configurar la integración e implementación continua de Azure Container Registry o Docker Hub, consulte Implementación continua con Web App for Containers. Para registros privados, puede actualizar el contenedor deteniendo y luego iniciando la aplicación web. También puede cambiar o agregar una configuración de aplicación ficticia para forzar una actualización del contenedor.

¿Ofrecen soporte para entornos de ensayo?

Sí.

¿Puedo usar "WebDeploy/MSDeploy" para implementar mi aplicación web?

Sí, es necesario establecer un valor de la aplicación llamado WEBSITE_WEBDEPLOY_USE_SCM en false.

Se produce un error en la implementación de GIT de la aplicación cuando se usa la aplicación web de Linux. ¿Cómo puedo solucionar el problema?

Si se produce un error en la implementación de Git en la aplicación web de Linux, puede elegir una de las opciones siguientes para implementar el código de aplicación:

  • Use la característica Entrega continua (versión preliminar): puede almacenar el código fuente de la aplicación en un repositorio git de Azure DevOps o en un repositorio de GitHub para usar la entrega continua de Azure. Para más información, consulte la publicación How to configure Continuous Delivery for Linux web app (Configuración de entrega continua para aplicaciones web de Linux).

  • Use la API ZIP deploy: para usar esta API, use SSH en la aplicación web y vaya a la carpeta en la que desea implementar el código. Ejecute el código siguiente:

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

    Si recibe un error que indica que el curl comando no se encuentra, asegúrese de instalar curl mediante apt-get install curl antes de ejecutar el comando anterior curl .

Compatibilidad con idiomas

Quiero usar sockets web en mi aplicación Node.js. ¿Hay alguna opción o configuración especial que deba establecer?

Sí, deshabilite perMessageDeflate en el código de Node.js en el servidor. Por ejemplo, si usa socket.io, use el código siguiente:

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

¿Se admiten aplicaciones de .NET Core sin compilar?

Sí.

¿Soporta Composer como administrador de dependencias para aplicaciones PHP?

Sí, durante una implementación de Git, Kudu debe detectar que va a implementar una aplicación PHP (gracias a la presencia de un archivo composer.lock) y Kudu desencadenará una instalación del compositor.

Contenedores personalizados

¿Puedo usar identidades administradas con App Service al extraer imágenes de ACR?

Sí, esta funcionalidad está disponible en la CLI de Azure. Puede usar identidades asignadas por el sistema o asignadas por el usuario. Esta funcionalidad no se admite actualmente en Azure Portal.

Utilizo mi propio contenedor personalizado. Quiero que la plataforma monte una compartición SMB en el directorio `/home/`.

Si WEBSITES_ENABLE_APP_SERVICE_STORAGE la configuración no está especificada o se establece en false, el /home/ directorio no se compartirá entre instancias de escalado y los archivos escritos no se conservarán entre reinicios. Establecer explícitamente WEBSITES_ENABLE_APP_SERVICE_STORAGE en true habilita el montaje. Una vez que se establece en true, si quiere deshabilitar el montaje, debe establecer WEBSITES_ENABLE_APP_SERVICE_STORAGE explícitamente en false.

Mi contenedor falla al iniciar con "no queda espacio en el dispositivo". ¿Qué significa este error?

App Service en Linux usa dos tipos diferentes de almacenamiento:

  • Almacenamiento del sistema de archivos: el almacenamiento del sistema de archivos se incluye en la cuota del plan de App Service. Se usa cuando los archivos se guardan en el almacenamiento persistente que se basa en el /home directorio.
  • Espacio en disco host: el espacio en disco host se usa para almacenar imágenes de contenedor. Se administra mediante la plataforma a través del controlador de almacenamiento de Docker.

El espacio en disco del host es independiente de la cuota de almacenamiento del sistema de archivos. No se puede expandir y hay un límite de 15 GB para cada instancia. Se utiliza para almacenar cualquier imagen personalizada en el trabajador. Es posible que pueda usar más de 15 GB en función de la disponibilidad exacta del espacio en disco host, pero esto no está garantizado.

Si la capa grabable del contenedor guarda los datos fuera del /home directorio o una ruta de acceso de almacenamiento de Azure montada, también se consumirá el espacio en disco host.

La plataforma limpia de forma rutinaria el espacio en disco host para quitar contenedores no usados. Si el contenedor escribe una gran cantidad de datos fuera del /home directorio o Bring Your Own Storage (BYOS), se producirán errores de inicio o excepciones en tiempo de ejecución una vez que se supere el límite de espacio en disco host.

Se recomienda mantener las imágenes de contenedor lo más pequeñas posible y escribir datos en el almacenamiento persistente o BYOS cuando se ejecuta en Linux App Service. Si no es posible, debe dividir el plan de App Service porque el espacio en disco del host es fijo y compartido entre todos los contenedores del plan de App Service.

Mi contenedor personalizado tarda mucho tiempo en iniciarse y la plataforma reinicia el contenedor antes de que finalice el inicio.

Puede configurar la cantidad de tiempo que espera la plataforma antes de reiniciar el contenedor. Para ello, establezca el valor WEBSITES_CONTAINER_START_TIME_LIMIT de la aplicación en el valor que desee. El valor predeterminado es de 230 segundos y el valor máximo es de 1800 segundos.

¿Cuál es el formato de la dirección URL del servidor de registro privado?

Proporcione la dirección URL completa del Registro, incluida https://.

¿Cuál es el formato del nombre de la imagen en la opción del registro privado?

Agregue el nombre de la imagen completo, incluida la dirección URL de registro privado (por ejemplo, myacr.azurecr.io/dotnet:latest). Los nombres de imagen que usan un puerto personalizado no se pueden escribir a través del portal. Para establecer docker-custom-image-name, use la azherramienta de línea de comandos.

¿Se puede exponer más de un puerto en mi imagen de contenedor personalizado?

No se admite la exposición de más de un puerto.

¿Puedo traer mi propio almacenamiento?

Sí, la prestación traiga su propio almacenamiento está en versión preliminar.

¿Por qué no puedo examinar el sistema de archivos de mi contenedor personalizado o ejecutar procesos desde el sitio de SCM?

El sitio de SCM se ejecuta en un contenedor independiente. no puede comprobar el sistema de archivos o los procesos en ejecución del contenedor de la aplicación.

¿Es necesario implementar HTTPS en mi contenedor personalizado?

No, la plataforma controla la terminación HTTPS en los front-end compartidos.

¿Es necesario usar WEBSITES_PORT contenedores personalizados?

Sí, es necesario para los contenedores personalizados. Para configurar manualmente un puerto personalizado, use la instrucción EXPOSE en Dockerfile y la configuración de la aplicación, WEBSITES_PORT, con un valor de puerto para enlazar en el contenedor.

¿Puedo usar ASPNETCORE_URLS en la imagen de Docker?

Sí, sobrescriba la variable de entorno antes de iniciar la aplicación .NET Core. Por ejemplo, en el script de init.sh: exportar ASPNETCORE_URLS={Su valor}

Contenedores múltiples con Docker Compose

¿Cómo puedo configurar Azure Container Registry (ACR) para usar con varios contenedores?

Para poder usar ACR con varios contenedores, todas las imágenes de contenedor deben estar hospedadas en el mismo servidor de registro ACR. Una vez que se encuentren en el mismo servidor del Registro, deberá crear la configuración de la aplicación y, a continuación, actualizar el archivo de configuración de Docker Compose para incluir el nombre de la imagen de ACR.

Cree la siguiente configuración de la aplicación:

  • DOCKER_REGISTRY_SERVER_USERNAME
  • DOCKER_REGISTRY_SERVER_URL (dirección URL completa, por ejemplo: https://<server-name>.azurecr.io)
  • DOCKER_REGISTRY_SERVER_PASSWORD (habilitar el acceso de administrador en la configuración de ACR)

En el archivo de configuración, haga referencia a la imagen ACR como se muestra en el siguiente ejemplo:

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

¿Cómo puedo saber qué contenedor es accesible desde Internet?

  • Solo un contenedor puede estar abierto para el acceso
  • Solo el puerto 80 y 8080 es accesible (puertos expuestos)

Estas son las reglas para determinar qué contenedor es accesible, en el orden de prioridad:

  • Configuración de la aplicación WEBSITES_WEB_CONTAINER_NAME establecida en el nombre del contenedor
  • El primer contenedor que define el puerto 80 o 8080
  • Si ninguna de las opciones anteriores es cierta, el primer contenedor definido en el archivo será accesible (expuesto)

¿Cómo se usa depends_on?

La depends_on opción no se admite en App Service y se omite. Al igual que la recomendación de control de inicio y apagado de Docker, las aplicaciones de varios contenedores de App Service deben verificar las dependencias a través del código de la aplicación, tanto en el inicio como en el apagado. En el código de ejemplo siguiente se muestra una aplicación de Python que comprueba si se ejecuta un contenedor de Redis.

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

Los sockets web se admiten en aplicaciones Linux. La webSocketsEnabled configuración de ARM no se aplica a las aplicaciones linux, ya que los sockets web siempre están habilitados para Linux.

Importante

Los sockets web ahora son compatibles con aplicaciones Linux en planes de App Service gratuitos. Se admiten hasta cinco conexiones de socket web en planes gratuitos de App Service. Si se supera este límite, se produce una respuesta HTTP 429 (demasiadas solicitudes).

Precios y contrato de nivel de servicio

¿Cuál es el precio ahora que el servicio está disponible con carácter general?

Los precios varían según la SKU y la región, pero puede ver más detalles en nuestra página de precios: Precios de App Service.

Otras preguntas

¿Cómo funciona la solicitud de calentamiento del contenedor?

Cuando Azure App Services inicia tu contenedor, la solicitud de preparación envía una solicitud HTTP al endpoint /robots933456.txt de tu aplicación. Esto es simplemente un punto de conexión ficticio, pero la aplicación debe responder devolviendo cualquier código de estado (incluido 5xx). Si la lógica de la aplicación no responde enviando un código de estado HTTP a puntos de conexión inexistentes, la solicitud de preparación no puede recibir una respuesta. Por lo tanto, reinicia constantemente el contenedor.

Para modificar el comportamiento predeterminado, puede personalizar la ruta del punto de conexión de calentamiento y los códigos de estado que hacen que el sitio se considere listo. Para ello, establezca la configuración de la aplicación WEBSITE_WARMUP_PATH y WEBSITE_WARMUP_STATUSES .

La solicitud de calentamiento también podría producir un error debido a una configuración incorrecta del puerto.

Para asegurarse de que el puerto está configurado correctamente en Azure App Services, consulte la pregunta ¿ Cómo se especifica el puerto en el contenedor de Linux?

¿Es posible aumentar el tiempo de espera de la solicitud de inicialización del contenedor?

Por defecto, se produce un error en la solicitud de preparación después de esperar 240 segundos para obtener una respuesta del contenedor. Puede aumentar el tiempo de espera de la solicitud de preparación del contenedor agregando la configuración WEBSITES_CONTAINER_START_TIME_LIMIT de la aplicación con un valor entre 240 y 1800 segundos.

¿Cómo se especifica el puerto en mi contenedor de Linux?

Tipo de contenedor Descripción Procedimiento para establecer o usar el puerto
Contenedores integrados Si selecciona una versión de lenguaje o marco para una aplicación de Linux, se selecciona un contenedor predefinido de forma automática. Para apuntar el código de la aplicación al puerto correcto, use la variable de entorno PORT.
Contenedores personalizados Tiene control total sobre el contenedor. App Service no tiene control sobre cuál puerto escucha el contenedor. Lo que sí necesita es saber a qué puerto reenviar las solicitudes. Si el contenedor escucha en el puerto 80 o el 8080, el App Service puede detectarlo automáticamente. Si escucha en cualquier otro puerto, debe establecer la configuración de la aplicación WEBSITES_PORT en el número de puerto y App Service reenvía las solicitudes a ese puerto en el contenedor. La configuración de la aplicación WEBSITES_PORT no tiene ningún efecto dentro del contenedor y no puede acceder a ella como una variable de entorno dentro del contenedor.

¿Se puede usar una base de datos basada en archivos (como SQLite) con la aplicación web de Linux?

El sistema de archivos de la aplicación es un recurso compartido de red montado. Esto habilita escenarios de ampliación en los que el código se debe ejecutar en varios hosts. Desafortunadamente, esto bloquea el uso de proveedores de bases de datos basados en archivos como SQLite, ya que no es posible adquirir bloqueos exclusivos en el archivo de base de datos. Se recomienda un servicio de base de datos administrado: Azure SQL, Azure Database for MySQL o Azure Database for PostgreSQL

¿Cuáles son los caracteres admitidos en los nombres de configuración de la aplicación?

Puede usar solo letras (A-Z, a-z), números (0-9) y el carácter de subrayado (_) para la configuración de la aplicación.

¿Dónde puedo solicitar nuevas características?

Puede enviar su idea en el foro de comentarios de Web Apps. Agregue [Linux] en el título de la idea.