Editar

Compartir vía


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 previsibles para la sección del archivo de inicio cuando se configura la pila en 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)
Tomcat Ubicación de un script para realizar las configuraciones necesarias (por ejemplo, /home/site/deployments/tools/startup_script.sh)
Node.js 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
Python script de inicio opcional
Ruby 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 la máquina de desarrollo local mediante SSH, SFTP o Visual Studio Code (para aplicaciones de Node.js de depuración en directo). Para más información, consulte Depuración remota y SSH en 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.

¿Los entornos de ensayo son compatibles?

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 no se encuentra el comando curl, asegúrese de que instalar curl mediante apt-get install curl antes de ejecutar el comando curl anterior.

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í.

¿Admite un compositor como un 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 administradas asignadas por el sistema o por el usuario. Esta funcionalidad no se admite actualmente en Azure Portal.

Utilizo mi propio contenedor personalizado. Quiero que la plataforma monte un recurso compartido de SMB en el directorio `/home/`.

Si el valor de WEBSITES_ENABLE_APP_SERVICE_STORAGE no se ha especificado o es true, el directorio /home/no se compartirá entre instancias de escala y los archivos que se escriben no se conservarán al reiniciar. Establecer de forma explícita WEBSITES_ENABLE_APP_SERVICE_STORAGE en true habilitará 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 no se puede iniciar con "sin espacio restante 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 usa para almacenar cualquier imagen personalizada en el trabajo. 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 el tiempo que va a esperar 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?

Debe escribir la dirección URL completa del registro, incluidos http:// o 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 imágenes que usan un puerto personalizado no se pueden especificar 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 que se inicie la aplicación .NET Core. Por ejemplo, en el script init.sh: exporte ASPNETCORE_URLS={Su valor}.

Varios contenedores 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 estén en el mismo servidor de registro, tendrá que crear la configuración de la aplicación y, después, actualizar el archivo de configuración de Docker Compose para incluir el nombre de 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 similar al ejemplo siguiente:

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 para definir el puerto 80 u 8080
  • Si ninguna de las opciones anteriores es true, el primer contenedor definido en el archivo será accesible (expuesto)

¿Cómo se usa depends_on?

La opción depends_on no se admite en App Service y se omitirá. Al igual que la recomendación de inicio y apagado del control de Docker, las aplicaciones de varios contenedores de App Service deben comprobar las dependencias mediante el código de la aplicación, tanto en el inicio como en la desconexión. 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 preparación del contenedor?

Cuando Azure App Services inicia el contenedor, la solicitud de preparación envía una solicitud HTTP al punto de conexión robots933456.txt de la aplicación. Se trata simplemente de un punto de conexión ficticio, pero la aplicación debe responder con cualquier código de estado distinto de 5XX. Si la lógica de la aplicación no responde con algún código de estado HTTP para los puntos de conexión inexistentes, la solicitud de activación no podrá recibir una respuesta y reiniciará el contenedor perpetuamente. La solicitud de preparación 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 especifico el puerto en mi contenedor Linux?

¿Es posible aumentar el tiempo de espera de la solicitud de preparació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 de la aplicación con un valor entre WEBSITES_CONTAINER_START_TIME_LIMIT240 y 1800 segundos.

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

Tipo de contenedor Description 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 el puerto en el que escucha el contenedor. Lo que sí necesita es saber a qué puerto reenviar las solicitudes. Si el contenedor escucha en el puerto 80 u 8080, 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 se 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 escalado horizontal 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.