Docker:驱动器尚未共享

Ale*_*tov 31 docker asp.net-core

当“dockerizing”一个ASP.NET Core 3.1 MVC应用程序时,我得到了以下结果:

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.
Run Code Online (Sandbox Code Playgroud)

不用说' docker run --help '根本没有帮助(Docker 文档中缺少链接/锚点等)。

一些额外的信息:

  • 应用程序是VS2019脚手架,无需任何修改
  • Docker 映像是 Linux(我不知道哪个)。
  • Docker 版本为19.03.5,构建 633a0ea

因为我不熟悉 Linux,所以这个错误对我来说就像是一个“表演者”。也许 Linux 没有被指示挂载驱动器?但哪一个?消息没有说...

也许 Windows 必须共享驱动器,或者将文件夹映射到需要共享的驱动器?消息也没有说这个......

这是 Docker 仪表板的屏幕截图:

在此处输入图片说明

这是 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"]
Run Code Online (Sandbox Code Playgroud)

任何帮助将非常感激。提前致谢!

BMi*_*tch 30

docker run 命令包括来自 C 驱动器的卷,例如-v "C:\Users\admin\vsdbg\vs2017u5:/remote_debugger:rw". 为了使这些工作,您需要在共享驱动器中包含 C 驱动器(选中设置 -> 资源 -> 文件共享下的框)。您还可以将要共享的文件移动到已共享到嵌入式 VM 的 D 驱动器,尽管在这种情况下这可能不是一个选项。要知道要共享哪些驱动器,请在运行命令中检查卷安装中使用的驱动器。

在适用于 Windows 的先前版本的 docker 中,这会默默地成功并将一个空文件夹安装到容器中。所以告诉用户首先检查共享驱动器的错误是一个很好的改进。


Ale*_*tov 16

使驱动器 C:可用于 Docker仪表板中的Docker 容器解决了问题,再次查看未选中的图片。

但是,恕我直言,必须分享一些评论。

  • 错误消息不清楚需要共享哪个驱动(我猜Linux 支持多个驱动器
  • 如果不使驱动器 C: 可用(或可引导驱动器,操作系统所在的驱动器)Docker将无法运行,为什么在安装后它没有检查驱动器本身?这只是在 Docker 仪表板中单击( !! ),所以它应该(相对)容易。

可能存在一个非常简单的解释,为什么会显示这条非常无用的消息——Linux 开发人员输入了很多(CLI!)并且对此不太满意,他们没有输入足够的内容来为用户提供有意义的诊断。

好吧,我确实相信我是不对的,但仍然必须解释为什么最终产品中会出现如此巨大的遗漏


Nav*_*lli 7

在docker中的“文件共享”UI下添加项目:

在docker中的“文件共享”UI下添加项目


小智 1

从输出中拉出长的“docker run ... /dev/null”命令,并在启用 docker 的命令提示符下自行运行它。然后,Docker 桌面应提示允许共享/网络访问。在此之前,您可能需要重新启动 Docker Desktop 应用程序。