Docker在VS中运行但在发布到AWS时出错? 错误CS5001:程序不包含适用于入口点的静态“主”方法
我为Visual Studio 2017安装了AWS工具包(V15.7.3),并使用API模板和Linux docker支持创建了一个新的空Asp.Net核心2.1项目。 我可以在Visual Studio中运行它。
加载项目后Visual Studio Docker输出
==========准备容器========== 让Docker容器准备就绪...... docker-compose -f“C:\ work \ Strats \ docker-compose.yml”-f“C:\ work \ Strats \ docker-compose.override.yml”-f“C:\ work \ Strats \ obj \ Docker \ docker-compose.vs.debug.g.yml“-p dockercompose607729401690719332 --no-ansi config 未设置DOCKER_REGISTRY变量。 默认为空字符串。 服务: processfiles: 建立: 上下文:C:\ work \ Strats dockerfile:ProcessFiles / Dockerfile 目标:基地 entrypoint:tail -f / dev / null 环境: ASPNETCORE_ENVIRONMENT:发展 ASPNETCORE_HTTPS_PORT:'44347' ASPNETCORE_URLS:https:// +:443; http:// +:80 DOTNET_USE_POLLING_FILE_WATCHER:'1' NUGET_FALLBACK_PACKAGES:/root/.nuget/fallbackpackages image:processfiles:dev 标签: com.microsoft.visualstudio.debuggee.arguments:' - additionalProbingPath /root/.nuget/packages --additionalProbingPath /root/.nuget/fallbackpackages bin / Debug / netcoreapp2.1 / ProcessFiles.dll' com.microsoft.visualstudio.debuggee.killprogram:/ bin / bash -c“if PID = $$(pidof -x dotnet); 然后杀死$$ PID; 科幻” com.microsoft.visualstudio.debuggee.program:dotnet com.microsoft.visualstudio.debuggee.workingdirectory:/ app 端口: - 出版:49971 目标:80 - 出版:44347 目标:443 卷: - C:\ work \ Strats \ ProcessFiles:/ app:rw - C:\ Users \ ... \ vsdbg \ vs2017u5:/ remote_debugger:ro - C:\ Users \ ... \ AppData \ Roaming \ ASP.NET \ Https:/root/.aspnet/https:ro - C:\ Users \ ... \ AppData \ Roaming \ Microsoft \ UserSecrets:/root/.microsoft/usersecrets:ro - C:\ Program Files \ dotnet \ sdk \ NuGetFallbackFolder:/root/.nuget/fallbackpackages:ro - C:\ Users \ ... \。nuget \ packages:/root/.nuget/packages:ro 版本:'3.4' docker ps --filter“status = running”--filter“name = dockercompose607729401690719332_processfiles_”--format {{。ID}} -n 1 docker-compose -f“C:\ work \ Strats \ docker-compose.yml”-f“C:\ work \ Strats \ docker-compose.override.yml”-f“C:\ work \ Strats \ obj \ Docker \ docker-compose.vs.debug.g.yml“-p dockercompose607729401690719332 --no-ansi build 未设置DOCKER_REGISTRY变量。 默认为空字符串。 构建流程文件 步骤1/4:FROM microsoft / dotnet:2.1-aspnetcore-runtime AS base ---> 04aae08f15c5 第2/4步:WORKDIR / app --->使用缓存 ---> 135955e04284 步骤3/4:EXPOSE 49971 --->使用缓存 ---> 2e1bb95e0d70 步骤4/4:EXPOSE 44347 --->使用缓存 ---> 89dc3708552d 成功建成89dc3708552d 成功标记了流程文件:dev docker-compose -f“C:\ work \ Strats \ docker-compose.yml”-f“C:\ work \ Strats \ docker-compose.override.yml”-f“C:\ work \ Strats \ obj \ Docker \ docker-compose.vs.debug.g.yml“-p dockercompose607729401690719332 --no-ansi up -d --no-build --force-recreate --remove-orphans 未设置DOCKER_REGISTRY变量。 默认为空字符串。 使用默认驱动程序创建网络“dockercompose607729401690719332_default” 创建dockercompose607729401690719332_processfiles_1 ... 创建dockercompose607729401690719332_processfiles_1 ...完成 完成! Docker容器已准备就绪。
在Visual Studio中运行时Docker输出
==========调试========== docker ps --filter“status = running”--filter“name = dockercompose607729401690719332_processfiles_”--format {{。ID}} -n 1 1cad14cb758c 启动https:// localhost:44347 / api / values ...
Visual studio构建输出
1> ------ Build build:项目:docker-compose,配置:调试任何CPU ------ 1> docker ps --filter“status = running”--filter“name = dockercompose607729401690719332_processfiles_”--format {{。ID}} -n 1 1> 1cad14cb758c 1> docker exec -i 1cad14cb758c / bin / bash -c“如果PID = $(pidof -x dotnet);则kill $ PID; fi” 1> C:\ work \ Strats \ ProcessFiles \ ProcessFiles.csproj:警告NU1701:使用'.NETFramework,Version = v4.6.1'而不是项目目标框架'恢复包'System.Linq.Queryable 4.0.1'。 NETCoreApp,版本= V2.1' 。 此软件包可能与您的项目不完全兼容。 1> ProcessFiles - > C:\ work \ Strats \ ProcessFiles \ bin \ Debug \ netcoreapp2.1 \ ProcessFiles.dll 1>完成构建项目“ProcessFiles.csproj”。 1> docker-compose -f“C:\ work \ Strats \ docker-compose.yml”-f“C:\ work \ Strats \ docker-compose.override.yml”-f“C:\ work \ Strats \ _ obj \ Docker \ docker-compose.vs.debug.g.yml“-p dockercompose607729401690719332 --no-ansi up -d 1>未设置DOCKER_REGISTRY变量。 默认为空字符串。 1> dockercompose607729401690719332_processfiles_1是最新的 ==========构建:1成功或最新,0失败,0跳过==========
因此它运行并在浏览器中显示默认值api示例。
现在我右键单击该项目,然后在修复Dockerfile
之后单击“将容器发布到AWS …”( Docker for Windows构建添加了前缀`/ var / lib / docker / tmp /`for COPY? )。 但是,AWS消息框中的以下消息失败了吗?
检查Dockerfile以了解如何构建项目和docker镜像 ...跳过构建项目,因为它是作为Dockerfile的一部分完成的 执行docker build ...调用'docker build',工作文件夹'C:\ work \ Strats \ ProcessFiles,docker file C:\ work \ Strats \ ProcessFiles \ Dockerfile,image name processfiles:latest' ... docker build:将构建上下文发送到Docker守护程序1.176MB ... docker build:步骤1/17:FROM microsoft / dotnet:2.1-aspnetcore-runtime AS base ...docker构建:---> 04aae08f15c5 ... docker build:步骤2/17:WORKDIR / app ... docker build:--->使用缓存 ...docker构建:---> 135955e04284 ...docker构建:步骤3/17:EXPOSE 49971 ... docker build:--->使用缓存 ...docker构建:---> 2e1bb95e0d70 ...docker构建:步骤4/17:EXPOSE 44347 ... docker build:--->使用缓存 ...docker构建:---> 89dc3708552d ... docker build:步骤5/17:FROM microsoft / dotnet:2.1-sdk AS build ...docker构建:---> 7c3e298d40ac ... docker build:步骤6/17:WORKDIR / src ... docker build:--->使用缓存 ...docker构建:---> 6b6446592420 ... docker build:步骤7/17:COPY ProcessFiles.csproj ProcessFiles / ...docker构建:---> 024a84501cff ... docker build:步骤8/17:运行dotnet还原ProcessFiles / ProcessFiles.csproj ... docker build:--->在1ef41c99d3bc中运行 ... docker build:恢复/src/ProcessFiles/ProcessFiles.csproj的包... ... docker build:生成MSBuild文件/src/ProcessFiles/obj/ProcessFiles.csproj.nuget.g.props。 ... docker build:生成MSBuild文件/src/ProcessFiles/obj/ProcessFiles.csproj.nuget.g.targets。 ... docker build:对于/src/ProcessFiles/ProcessFiles.csproj,恢复在770.82 ms内完成。 ... docker build:删除中间容器1ef41c99d3bc ...docker构建:---> 276efaf02bd4 ...docker构建:步骤9/17:复制。 。 ...docker建造:---> 128814476275 ... docker build:步骤10/17:WORKDIR / src / ProcessFiles ... docker build:删除中间容器004eb873b480 ...docker构建:---> 8c1741062d87 ... docker build:步骤11/17:运行dotnet构建ProcessFiles.csproj -c Release -o / app ... docker build:--->在fd25517b7941中运行 ... docker build:用于.NET Core的Microsoft(R)Build Engine版本15.7.179.6572 ... docker build:版权所有(C)Microsoft Corporation。 版权所有。 ... docker build:对于/src/ProcessFiles/ProcessFiles.csproj,恢复在55.9毫秒内完成。 ... docker build:CSC:错误CS5001:程序不包含适用于入口点的静态“Main”方法[/src/ProcessFiles/ProcessFiles.csproj] ...docker构建:构建失败。 ... docker build:CSC:错误CS5001:程序不包含适用于入口点的静态“Main”方法[/src/ProcessFiles/ProcessFiles.csproj] ...docker建造:0警告 ... docker build:1错误 ...docker构建:时间流逝00:00:02.56 ... docker build:命令'/ bin / sh -c dotnet build ProcessFiles.csproj -c Release -o / app'返回非零代码:1 执行“docker build”时出错 尝试清除为失败的部署创建的任何ELB资源 将容器发布到AWS的未知错误
这是VS创建的主要方法。
namespace ProcessFiles { public class Program { public static void Main(string[] args) { CreateWebHostBuilder(args).Build().Run(); } public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup(); } }
Dockerfile
FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base WORKDIR /app EXPOSE 49971 EXPOSE 44347 FROM microsoft/dotnet:2.1-sdk AS build WORKDIR /src COPY ProcessFiles.csproj ProcessFiles/ RUN dotnet restore ProcessFiles/ProcessFiles.csproj COPY . . WORKDIR /src/ProcessFiles RUN dotnet build ProcessFiles.csproj -c Release -o /app FROM build AS publish RUN dotnet publish ProcessFiles.csproj -c Release -o /app FROM base AS final WORKDIR /app COPY --from=publish /app . ENTRYPOINT ["dotnet", "ProcessFiles.dll"]
构建阶段的路径是不可靠的。 您的项目文件正被复制到子文件夹/src/ProcessFiles
,但源文件正被复制到/src
。 在复制之前设置WORKDIR
应该允许它们落在正确的位置。
FROM microsoft/dotnet:2.1-sdk AS build WORKDIR /src COPY ProcessFiles.csproj ProcessFiles/ RUN dotnet restore ProcessFiles/ProcessFiles.csproj WORKDIR /src/ProcessFiles COPY . . RUN dotnet build ProcessFiles.csproj -c Release -o /app