ASP.NET Core 2 — Docker — Falha na extração após “pull” request — ProcessUtilityVMImage — UtilityVM

Durante o processo de “containerização” me deparei com uma falha que já é motivo de diverssas issues no github do Docker.
Para quem está no caminho do aprendizado, se deparar com uma situação assim não é nada agradável, visto que em diferentes momentos cada usuário dá uma opinião diferente sobre a possível solução, que vai desde problemas com o antivírus até falhas invisíveis do firewall, entre outras.

failed to register layer: re-exec error: exit status 1: output: ProcessUtilityVMImage C:\ProgramData\docker\windowsfilter…. UtilityVM: The system cannot find the path specified.

Diante desse cenário, depois de ver tentar entender as inúmeras versões (tags) das imagens do Docker uma situação ficou mais clara:

  • Windows Server 2016 1607
  • Windows Server 2016 1790
  • Windows Server Core 2016 1790
  • Windows Server 2016 1803
  • Windows Server Core 2016 1803

Todas são versões do Windows Server 2016, todas permitem a “containerização” possuem suporte ao Docker, esse suporte já é nativo, ou seja, sem a necessidade de instalação do pacote do Docker.

Windows Server 2016 1607

Imagens para ASP.NET Core 2.1

  • Windows Server 2016 1607 instalado;
  • Docker build gerada com a imagem base.

Não vai funcionar, ou seja, você vai se deparar com a mensagem de falha que está sendo tratada neste post.

As imagens do Docker para o ASP.NET Core 2.1 já possuem suporte conforme os itens:

  • 2.1-sdk
  • 2.1-aspnetcore-runtime
  • 2.1-runtime

Solução — Windows Server 2016

  • Instale o Windows Server 2016 (build 1709 ou superior), ambas já possuem suporte aos containers. Você vai também encontrar com os nomes “Microsoft Windows Server 1709 with Containers — ami-cb271cae” ou “Microsoft Windows Server 1709 Semi-Annual Channel release with Containers [English]”

Solução — Dockerfile

FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base  
WORKDIR /app
FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /src
COPY *.csproj <projectname>/
RUN dotnet restore <projectname>/<project>.csproj
WORKDIR /src/<projectname>
COPY . ./
RUN dotnet build <project>.csproj -c Release -o /app
FROM build AS publish
RUN dotnet publish <project>.csproj -c Release -o /app
ENV ASPNETCORE_ENVIRONMENT DevelopmentFROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "<projectname>.dll"]

Nesta sugestão as imagens base do ASP.NET Core 2.1 estão configuradas para utilizar o Windows Server 2016 (build 1709). Na documentação do Docker você encontra outras opções.

Dica

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store