Ao "encaixar" um aplicativo MVC do ASP.NET Core 3.1, obtive o seguinte resultado:
docker run -dt -v "C:\Users\admin\vsdbg\vs2017u5:/remote_debugger:rw" -v "D:\xxx\yyy\Spikes\DockerizedWebApp1\DockerizedWebApp1:/app" -v "D:\xxx\yyy\Spikes\DockerizedWebApp1:/src/" -v "C:\Users\admin\.nuget\packages\:/root/.nuget/fallbackpackages2" -v "C:\Program Files\dotnet\sdk\NuGetFallbackFolder:/root/.nuget/fallbackpackages" -e "DOTNET_USE_POLLING_FILE_WATCHER=1" -e "ASPNETCORE_LOGGING__CONSOLE__DISABLECOLORS=true" -e "ASPNETCORE_ENVIRONMENT=Development" -e "NUGET_PACKAGES=/root/.nuget/fallbackpackages2" -e "NUGET_FALLBACK_PACKAGES=/root/.nuget/fallbackpackages;/root/.nuget/fallbackpackages2" -P --name DockerizedWebApp1 --entrypoint tail dockerizedwebapp1:dev -f /dev/null
docker: Error response from daemon: status code not OK but 500: {"Message":"Unhandled exception: Drive has not been shared"}.
See 'docker run --help'.
C:\Users\admin\.nuget\packages\microsoft.visualstudio.azure.containers.tools.targets\1.10.6\build\Container.targets(198,5): error CTC1015: Docker command failed with exit code 125.
C:\Users\admin\.nuget\packages\microsoft.visualstudio.azure.containers.tools.targets\1.10.6\build\Container.targets(198,5): error CTC1015: docker: Error response from daemon: status code not OK but 500: {"Message":"Unhandled exception: Drive has not been shared"}.
C:\Users\admin\.nuget\packages\microsoft.visualstudio.azure.containers.tools.targets\1.10.6\build\Container.targets(198,5): error CTC1015: See 'docker run --help'.
C:\Users\admin\.nuget\packages\microsoft.visualstudio.azure.containers.tools.targets\1.10.6\build\Container.targets(198,5): error CTC1015: If the error persists, try restarting Docker Desktop.
Escusado será dizer que ' docker run --help ' não ajudou em nada (falta de links / âncoras nos documentos do Docker etc.).
Algumas informações adicionais:
- Aplicação é o que andaimes VS2019 sem nenhuma modificação .
- A imagem do Docker é Linux ( que não sei dizer ).
- A versão do Docker é 19.03.5, compilação 633a0ea
Como não estou familiarizado com o Linux, esse erro acaba sendo como um "impedimento de exibição" para mim. Talvez o Linux não seja instruído a montar uma unidade? Mas qual deles? A mensagem não diz isso ...
Talvez o Windows precise compartilhar uma unidade ou mapear uma pasta para uma unidade que precise ser compartilhada? A mensagem também não diz isso ...
Aqui está uma captura de tela do painel do Docker:
E aqui está o Dockerfile:
#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["DockerizedWebApp1/DockerizedWebApp1.csproj", "DockerizedWebApp1/"]
RUN dotnet restore "DockerizedWebApp1/DockerizedWebApp1.csproj"
COPY . .
WORKDIR "/src/DockerizedWebApp1"
RUN dotnet build "DockerizedWebApp1.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "DockerizedWebApp1.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "DockerizedWebApp1.dl"]
Qualquer ajuda seria muito apreciada. Desde já, obrigado!
fonte
500: {"Message":"Unhandled exception: Drive has not been shared"}
mensagem que acionou o erro é a parte útil.--help
prompt: github.com/moby/moby/blob/…Disponibilizar a unidade C: para contêineres do Docker no Painel do Docker resolveu o problema , observe a figura mais uma vez onde não foi verificada.
Alguns comentários devem ser compartilhados IMHO, no entanto.
Pode existir uma explicação muito simples para a exibição dessa mensagem inútil - os desenvolvedores do Linux digitam muito (CLI!) E, não estando muito satisfeitos com isso, não digitam o suficiente para fornecer um diagnóstico significativo aos usuários.
Bem, acredito que não estou certo, mas ainda deve haver uma explicação para que uma omissão tão grande apareça no produto final.
fonte
retire o comando longo "docker run ... / dev / null" da saída e execute-o sozinho em um prompt de comando ativado pelo docker. A área de trabalho do Docker deverá solicitar o acesso ao compartilhamento / rede. Convém reiniciar o aplicativo Docker Desktop antes de fazê-lo.
fonte