.net core docker正在通过VS2019工作,但映像生成出现错误且无法工作

.net core docker正在通过VS2019工作,但映像生成出现错误且无法工作,docker,asp.net-core-2.2,Docker,Asp.net Core 2.2,这将在通过VisualStudio运行时提供输出 但在构建时,它会抛出错误 DockerFile: "Docker": { "commandName": "Docker", "launchBrowser": true, "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}/api/values", "httpPort": 52706, "useSSL": true, "sslPort": 44344 } 构建doc

这将在通过VisualStudio运行时提供输出

但在构建时,它会抛出错误

DockerFile:

  "Docker": {
  "commandName": "Docker",
  "launchBrowser": true,
  "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}/api/values",
  "httpPort": 52706,
  "useSSL": true,
  "sslPort": 44344
}
构建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 build -t testdock .

请帮助重写dockerfile,以便完成此生成并运行应用程序

如果查看Visual Studio中的容器工具输出,您将看到一行,如:

COPY failed: stat /var/lib/docker/tmp/docker-builder666564019/testdocker/testdocker.csproj,: no such file or directory
在Windows上为Linux容器构建映像时,Docker会将active directory的内容提升到MobyLinux虚拟机中,所有复制命令等都会在MobyLinux虚拟机中的该路径上运行,而不是在本地文件系统上运行。由于项目通常需要访问同一解决方案中的其他项目才能生成,因此VisualStudio创建的DockerFile是相对于您的解决方案目录的,因此整个解决方案目录在MobyLinux中提升

很可能,您所做的是直接导航到您的项目目录并从那里运行Dockerfile,而无需传递一个用作“根”的目录。因此,Docker只是简单地提升当前文件,即MobyLinux虚拟机中的项目、目录和结果路径不再与Dockerfile中的内容匹配


长话短说,如果您想手动构建映像,那么您需要确保提升的active directory是您的解决方案目录,而不是项目目录。您只需将上面命令的最后一个字符串传递给您自己的命令即可实现这一点,这将使其与您的解决方案相对应。

我的解决方案似乎是:

docker build-f PROJECT\u DIR\Dockerfile


从解决方案目录运行时。

Andrew的示例适合我

我的命令:

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"

不知何故,Docker认为
是您的文件名
testdocker/testdocker.csproj
的一部分。由于您使用的
COPY
格式仅适用于带空格的文件名,请尝试使用“plan”
COPY
@Arkadiy:No。这是COPY命令的一种特殊语法,其中命令作为字符串组件数组传递。
指示该数组中的新项。这不是“路径”的一部分。@ChrisPratt知道,但有些东西已经腐烂了
testdocker.csproj,:没有这样的文件
-逗号不应该在那里。的确。这是我在下面的回答中发布的内容。正在复制到MobyLinux VM中的目录不正确,因此Dockerfile路径错误。您好,我能够生成映像,但现在的问题是我无法在浏览器中获得api响应
无法安全连接到此页面
。但这只是从VisualStudio运行
docker build -f helloworld\dockerfile -t sr-app .