"Docker": {
"commandName": "Docker",
"launchBrowser": true,
"launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}/api/values",
"httpPort": 52706,
"useSSL": true,
"sslPort": 44344
}
这给出了通过 Visual Studio 运行时的输出
但在构建时,它会抛出错误
Docker文件:
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-stretch-slim AS base
WORKDIR /app
EXPOSE 83
EXPOSE 443
FROM mcr.microsoft.com/dotnet/core/sdk:2.2-stretch AS build
WORKDIR /src
COPY ["testdocker/testdocker.csproj", "testdocker/"]
RUN dotnet restore "testdocker/testdocker.csproj"
COPY . .
WORKDIR "/src/testdocker"
RUN dotnet build "testdocker.csproj" -c Release -o /app
FROM build AS publish
RUN dotnet publish "testdocker.csproj" -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENV ASPNETCORE_URLS http://+:83
ENTRYPOINT ["dotnet", "testdocker.dll"]
构建 docker 镜像
docker build -t testdock .
但它给出了
COPY failed: stat /var/lib/docker/tmp/docker-builder666564019/testdocker/testdocker.csproj,: no such file or directory
请帮助重写 dockerfile,以便完成此构建并运行应用程序
如果您在 Visual Studio 中查看容器工具输出,您将看到类似以下的行:
docker build -f "C:\Users\foo\source\MySolution\TestDocker\Dockerfile" -t testdocker:dev --target base --label "com.microsoft.created-by=visual-studio" "C:\Users\foo\source\MySolution"
在 Windows 上为 Linux 容器构建映像时,Docker 会将活动目录的内容提升到 MobyLinux VM 中,并且所有复制命令等都针对 MobyLinux VM 中的该路径(而不是本地文件系统)运行。由于项目通常需要访问同一解决方案中的其他项目才能构建,因此 Visual Studio 创建的 Dockerfile 是相对于您的解决方案目录的,因此整个解决方案目录都会在 MobyLinux 中提升。
您所做的很可能是直接导航到项目目录并从那里运行 Dockerfile,而无需传递用作“根”的目录。因此,Docker 只是简单地提升当前的,即您的项目、目录,并且 MobyLinux VM 中的结果路径不再与 Dockerfile 中的内容匹配。
总而言之,如果您想手动构建映像,那么您需要确保提升的活动目录是您的解决方案目录,而不是您的项目目录。您只需将上面命令的最后一个字符串传递给您自己的命令即可实现此目的,这将使其与您的解决方案相关。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)