Leo*_*ira 19 c# docker .net-core
我在使用 docker 时遇到了问题,但找不到合适的解决方案。
我正在尝试使用 dotnet sdk 2.1 构建 docker 映像。
问题是当 docker 尝试运行 build 语句时,它失败了,错误输出是
CSC:错误 CS5001:程序不包含适合入口点的静态“Main”方法
有趣的是,如果我在本地命令行上执行构建语句,它工作正常。
我已经在项目上检查了我的 LanguageVersion 标签,它是 7.3。
这是我的 docker 文件
FROM microsoft/dotnet:2.1-sdk AS builder  
WORKDIR /src
COPY ./nuget  ./nuget
COPY ./NuGet.Config ./
COPY Services/AadTracking ./
# Copy all the referenced projects
COPY ./Services/AadTracking/Company/Company.Service.AadTracking/Company.Service.AadTracking.csproj ./AadTracking/Company/Company.Service.AadTracking/Company.Service.AadTracking.csproj
COPY ./Services/AadTracking/Office.Re.Service.AadTracking/Office.Re.Service.AadTracking.csproj ./AadTracking/Office.Re.Service.AadTracking/Office.Re.Service.AadTracking.csproj
COPY ./Services/AadTracking/Company/Office.Re.Service.AadTracking.Company/Office.Re.Service.AadTracking.Company.csproj ./AadTracking/Company/Office.Re.Service.AadTracking.Company/Office.Re.Service.AadTracking.Company.csproj
COPY ./Services/AadTracking/Office.Re.Service.AadTracking.EventStore/Office.Re.Service.AadTracking.EventStore.csproj ./AadTracking/Office.Re.Service.AadTracking.EventStore/Office.Re.Service.AadTracking.EventStore.csproj
# Restore packages
RUN dotnet restore "./AadTracking/Company/Company.Service.AadTracking/Company.Service.AadTracking.csproj"
RUN dotnet build -c Debug --no-restore "./AadTracking/Company/Company.Service.AadTracking/Company.Service.AadTracking.csproj"
# COPY source code 
#aad tracking
COPY ./Services/AadTracking/Company/Company.Service.AadTracking ./AadTracking/Company/Company.Service.AadTracking/
COPY ./Services/AadTracking/Office.Re.Service.AadTracking ./AadTracking/Office.Re.Service.AadTracking/
COPY ./Services/AadTracking/Company/Office.Re.Service.AadTracking.Company ./AadTracking/Company/Office.Re.Service.AadTracking.Company/
COPY ./Services/AadTracking/Office.Re.Service.AadTracking.EventStore ./AadTracking/Office.Re.Service.AadTracking.EventStore/
# Publish
RUN dotnet publish "./AadTracking/Company/Company.Service.AadTracking/Company.Service.AadTracking.csproj" -c Debug -o "../../dist"
# #Build the app image
FROM microsoft/dotnet:2.1-aspnetcore-runtime  
WORKDIR /app  
ENV ASPNETCORE_ENVIRONMENT Switch
ENV REINSURANCE_INSTANCE Docker-dev 
COPY --from=builder /dist .  
ENTRYPOINT ["dotnet", "Company.Service.AadTracking.dll"]
谢谢你的帮助!
Ome*_*r K 45
不幸的是,Microsoft 在 Dockerfile 中包含的内容和运行它的目录不一致。
可以通过三种解决方案来完成这项工作。
将自动生成的 Dockerfile 放在 .sln 文件旁边。
从解决方案的根目录运行以下命令
docker build -t 镜像名称。
将 Dockerfile 保留在项目文件夹中。
从解决方案的根目录运行以下命令
docker build -t imagename -f .\SampleProject\Dockerfile 。
对 Dockerfile 进行一些小的更改。现在,您必须从项目文件夹而不是解决方案的根目录运行 docker 命令。(比 .sln 文件低一级)。
补充
mar*_*ker 37
我知道现在回答有点晚了。VS 2019 仍然存在与 netcore 3.1 相同的问题。我看了一下 Microsoft 提供的示例。结果发现 docker 文件位于解决方案中的不同位置,并且 docker copy 命令无法正常工作。
你必须把你的docker文件上移一个目录,让它们和sln文件处于同一级别。它会解决这个问题。
或者,您可以在不更改 docker 文件位置的情况下更改以下示例 docker 文件的路径,恕我直言,最好将 docker 文件与其他文件一起保存。
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim-arm64v8 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["WhatzThat.Web.csproj", "WhatzThat.Web/"]
RUN dotnet restore "WhatzThat.Web/WhatzThat.Web.csproj" -r linux-arm64
WORKDIR "/src/WhatzThat.Web"
COPY . .
RUN dotnet build "WhatzThat.Web.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "WhatzThat.Web.csproj" -c Release -o /app/publish -r linux-arm64 --self-contained false --no-restore
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "WhatzThat.Web.dll"]
ara*_*ivl 15
使用多项目解决方案结构,我通过再次将“src”添加到要构建的目录中来修复。
像这样的东西:
COPY ["src/Todo.Core/Todo.Core.csproj", "Todo.Core/"]
RUN dotnet restore "Todo.Api/Todo.Api.csproj"
COPY . .
WORKDIR "/src/Todo.Api/"
RUN dotnet build "Todo.Api.csproj" -c Release -o /app/build
变成了这样:
COPY ["src/Todo.Core/Todo.Core.csproj", "Todo.Core/"]
RUN dotnet restore "Todo.Api/Todo.Api.csproj"
COPY . .
WORKDIR "/src/src/Todo.Api/"
RUN dotnet build "Todo.Api.csproj" -c Release -o /app/build
小智 7
在 docker 内编译和发布应用程序需要在 docker 内复制整个应用程序。这意味着您需要在 docker 中复制所有类文件 (.cs) 以及所需的支持文件(可能是 resx 或配置文件)。
请在下面找到相同的参考
https://github.com/aspnet/aspnet-docker/issues/401
| 归档时间: | 
 | 
| 查看次数: | 12674 次 | 
| 最近记录: |