Estou lutando há mais de uma semana para que um contêiner do Windows seja executado com um serviço de aplicativo do Azure. Minha preferência inicial era usar apenas uma instância de contêiner padrão, mas parece que você só tem a opção de rede pública ou privada, em vez de personalizada (ao contrário dos contêineres Linux). Parece que se você executar o contêiner do Windows em um serviço de aplicativo, terá as mesmas opções de rede que obtém com outros sites. O suporte do Azure para contêineres do Windows nos Serviços de Aplicativo équase um ano, mas relativamente poucos recursos abordam esse problema, exceto em cenários muito básicos.
Meu objetivo ao usar um contêiner é executar um serviço Windows em segundo plano de terceiros sob demanda, sem a sobrecarga de uma VM. Como ele está usando um serviço de aplicativo, decidi adicionar um endpoint de descanso principal do asp.net para obter algumas informações de status. Meu contêiner é baseado em mcr.microsoft.com/windows/servercore:ltsc2019
. Eu baixo e instalo o núcleo .net e asp.net (a imagem base possui apenas a estrutura .net), instalo meus serviços, construo e executo o site, então meu ponto de entrada é um script Powershell que atualiza alguns valores de configuração e executa o asp. net core endpoint que gerencia os serviços.
Se eu usar o portal, posso selecionar as opções de contêiner versus código, Windows versus Linux e começar com oimagem básica de início rápido, mas minha própria imagem no Azure Container Registry não inicia corretamente. Estou usando um dosimagens base suportadas, e funciona bem na minha máquina local. No Azure, ele cria tudo, mas nunca inicia. A pequena quantidade de registro indica que ele é iniciado, monta volumes de compartilhamento de arquivos e basicamente morre:
- Criar contêiner para imagem
- Tentando iniciar o contêiner
- Iniciar contêiner com sucesso
- O contêiner foi iniciado
- Chame o utilitário de configuração de contêiner
- Configuração do utilitário de contêiner concluída
- O contêiner foi iniciado
- Tentando parar o contêiner
- Tentando encerrar o contêiner
- Tentando remover o contêiner
- Contêiner removido com sucesso
Também estranho, mesmo com a imagem de início rápido, não vejo uma instância de contêiner real. Presumivelmente, isso ocorre porque ele está sendo executado diretamente no Plano de Serviço de Aplicativo, embora nada disso esteja muito claro. No aplicativo da web, posso ir para o plano de serviço de aplicativo (plano Windows Containers), onde, em Aplicativos, ele mostra um único aplicativo com o tipo "aplicativo, contêiner, windows", mas em nenhum lugar posso encontrar acesso para visualizar logs do console ou executar um shell como posso com recursos do tipo Container Image. Em algumas capturas de tela que encontrei, posso ver um link "Configurações do contêiner" em "Configurações" que não tenho, mas talvez seja apenas para contêineres Linux por algum motivo.
Então, como devo solucionar problemas de contêiner ao executar um serviço de aplicativo? Estou faltando alguma coisa em algum lugar?
Responder1
Diagnóstico
Você pode encontrar informações valiosas de depuração ao clicar Diagnose & Solve Problems -> Container Initialization
em Azure Web App for Containers.
Kudu
O App Service vem com um console de depuração que você pode usar para depurar, explorar, carregar arquivos, bem como pontos de extremidade JSON para obter informações sobre seu ambiente. Este console é chamado de Console Kudu ou Painel SCM para seu aplicativo.
Você pode acessar este painel acessando o link https://[Nome do seu aplicativo].scm.azurewebsites.net/.
Algumas das coisas que Kudu oferece são:
- configurações de ambiente para o console de depuração de despejo de diagnóstico do fluxo de log do aplicativo no qual você pode executar cmdlets do PowerShell e comandos básicos do DOS.
https://docs.microsoft.com/en-us/azure/app-service/troubleshoot-performance-degradation