.net 无法从docker文件为dotnet core web应用程序生成docker映像

.net 无法从docker文件为dotnet core web应用程序生成docker映像,.net,docker,kubernetes,dockerfile,.net,Docker,Kubernetes,Dockerfile,我正在尝试为windows上的dotnet核心应用程序构建docker映像,我计划将其托管在Kubernetes上 详情如下: #docker file FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base WORKDIR /app EXPOSE 8989 FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build WORKDIR /src COPY ["a

我正在尝试为windows上的dotnet核心应用程序构建docker映像,我计划将其托管在Kubernetes上

详情如下:

#docker file

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 8989

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["amazing-app.csproj", "amazing-app/"]
RUN dotnet restore "amazing-app/amazing-app.csproj"
COPY . .
WORKDIR "/src/amazing-app"
RUN dotnet build "amazing-app.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "amazing-app.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "amazing-app.dll"]
目录结构为>>

运行
docker build-t惊人的应用程序一后。
我在第10/16步遇到以下错误。应用程序在本地构建和运行,但docker无法从中构建映像

$> <Path>\amazing-app>docker build -t amazing-app-one .
Sending build context to Docker daemon  5.741MB
Step 1/16 : FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
 ---> 08096137b740
Step 2/16 : WORKDIR /app
 ---> Running in 14f5f9b7b3e5
Removing intermediate container 14f5f9b7b3e5
 ---> ae4846eda3f7
Step 3/16 : EXPOSE 8989
 ---> Running in 0f464e383641
Removing intermediate container 0f464e383641
 ---> 6b855b84749e
Step 4/16 : FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
 ---> 9817c25953a8
Step 5/16 : WORKDIR /src
 ---> Running in 5a8fc99a3ecf
Removing intermediate container 5a8fc99a3ecf
 ---> 694d5063e8e6
Step 6/16 : COPY ["amazing-app.csproj", "amazing-app/"]
 ---> 450921f630c3
Step 7/16 : RUN dotnet restore "amazing-app/amazing-app.csproj"
 ---> Running in ddb564e875be
  Restore completed in 1.81 sec for /src/amazing-app/amazing-app.csproj.
Removing intermediate container ddb564e875be
 ---> b59e0c1dfb4d
Step 8/16 : COPY . .
 ---> 695977f3b543
Step 9/16 : WORKDIR "/src/amazing-app"
 ---> Running in aa5575c99ce3
Removing intermediate container aa5575c99ce3
 ---> 781b4c552434
Step 10/16 : RUN dotnet build "amazing-app.csproj" -c Release -o /app/build
 ---> Running in 3a602c34b5a9
Microsoft (R) Build Engine version 16.4.0+e901037fe for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.

  Restore completed in 36.78 ms for /src/amazing-app/amazing-app.csproj.
CSC : error CS5001: Program does not contain a static 'Main' method suitable for an entry point [/src/amazing-app/amazing-app.csproj]

Build FAILED.

CSC : error CS5001: Program does not contain a static 'Main' method suitable for an entry point [/src/amazing-app/amazing-app.csproj]
    0 Warning(s)
    1 Error(s)

Time Elapsed 00:00:02.37
The command '/bin/sh -c dotnet build "amazing-app.csproj" -c Release -o /app/build' returned a non-zero code: 1
$>\Azing app>docker build-t Azing app one。
正在将生成上下文发送到Docker守护程序5.741MB
步骤1/16:从mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim作为基础
--->08096137740
步骤2/16:WORKDIR/app
--->在14f5f9b7b3e5中运行
拆卸中间容器14f5f9b7b3e5
--->ae4846eda3f7
步骤3/16:暴露8989
--->在0f464e383641中运行
卸下中间容器0f464e383641
--->6b855b84749e
步骤4/16:从mcr.microsoft.com/dotnet/core/sdk:3.1-buster作为构建
--->9817c25953a8
步骤5/16:WORKDIR/src
--->在5a8fc99a3ecf中运行
拆卸中间容器5a8fc99a3ecf
--->694d5063e8e6
步骤6/16:复制[“惊人的应用程序.csproj”,“惊人的应用程序/”]
--->450921f630c3
步骤7/16:运行dotnet还原“惊人的应用程序/惊人的应用程序.csproj”
--->在ddb564e875be中运行
对于/src/mazing-app/mazing-app.csproj,恢复在1.81秒内完成。
拆卸中间容器ddb564e875be
--->b59e0c1dfb4d
步骤8/16:复制。
--->695977f3b543
步骤9/16:WORKDIR“/src/惊人应用程序”
--->在aa5575c99ce3中运行
拆卸中间容器aa5575c99ce3
--->781b4c552434
步骤10/16:运行dotnet构建“惊人的app.csproj”-c发行版-o/app/build
--->在3a602c34b5a9中运行
Microsoft(R)针对.NET核心构建引擎版本16.4.0+e901037fe
版权所有(C)微软公司。版权所有。
对于/src/mazing-app/mazing-app.csproj,恢复在36.78毫秒内完成。
CSC:错误CS5001:程序不包含适用于入口点的静态“Main”方法[/src/amazing app/amazing app.csproj]
生成失败。
CSC:错误CS5001:程序不包含适用于入口点的静态“Main”方法[/src/amazing app/amazing app.csproj]
0个警告
1个错误
时间流逝00:00:02.37
命令'/bin/sh-c dotnet build“惊人的app.csproj”-c Release-o/app/build'返回一个非零代码:1
在上查找源代码


我是不是遗漏了什么?非常感谢您的帮助。

问题在文件夹结构中。您已将源代码复制到
/src
文件夹(请参见Dockerfile的第8行和第11行),但*.csproj文件已复制到
惊奇应用程序
子文件夹

您可以通过运行“中间”映像来检查它,例如:
781b4c552434
(它是崩溃前映像的散列),例如:
docker run-it--rm--name xxx b5a968c1103c bash
,然后您可以通过
ls
命令检查文件系统,以查看源代码和csproj文件位于不同的位置

因此,我建议将Dockerfile移动到根目录(接近.DockerRignore)并更新csproj文件的路径(另外,您需要从根目录运行
docker build
命令。此Dockerfile应该可以:

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 8989

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["amazing-app/amazing-app.csproj", "amazing-app/"]
RUN dotnet restore "amazing-app/amazing-app.csproj"
COPY . .
WORKDIR "/src/amazing-app"
RUN dotnet build "amazing-app.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "amazing-app.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "amazing-app.dll"]

问题在文件夹结构中。您已将源代码复制到
/src
文件夹(请参见Dockerfile的第8行和第11行),但*.csproj文件已复制到
Azing app
子文件夹

您可以通过运行“中间”映像来检查它,例如:
781b4c552434
(它是崩溃前映像的散列),例如:
docker run-it--rm--name xxx b5a968c1103c bash
,然后您可以通过
ls
命令检查文件系统,以查看源代码和csproj文件位于不同的位置

因此,我建议将Dockerfile移动到根目录(接近.DockerRignore)并更新csproj文件的路径(另外,您需要从根目录运行
docker build
命令。此Dockerfile应该可以:

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 8989

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["amazing-app/amazing-app.csproj", "amazing-app/"]
RUN dotnet restore "amazing-app/amazing-app.csproj"
COPY . .
WORKDIR "/src/amazing-app"
RUN dotnet build "amazing-app.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "amazing-app.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "amazing-app.dll"]

Program.cs
的内容是什么?请在您的问题中发布内容。我们无法进一步帮助您,因为错误对我来说非常明显:您的
Program.cs
文件中有错误。您好,请在此处找到
Program.cs
的内容是什么?请发布您问题中的内容。我们无法进一步帮助您,b因为错误对我来说很明显:您的
程序.cs
文件中有错误。您好,请在此处查找错误