Whi*_*der 5 c# dockerfile minimal-apis
我见过很多类似的问题,但似乎没有一个能准确代表我面临的问题。当我创建文件夹结构如下:
./
./src
./src/test
Run Code Online (Sandbox Code Playgroud)
然后导航到./src/test并运行dotnet new webapi -lang c#,这将创建一个可以正常工作的最小 API。我也可以dotnet publish -c RELEASE -o out /p:Version=1.0.0毫无问题地运行。
然后,当我尝试在根级别创建一个包含以下内容的 docker 文件时:
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
ARG BUILDCONFIG=RELEASE
ARG VERSION=1.0.0
COPY ./src/test/test.csproj ./src/test/
RUN dotnet restore ./src/test/test.csproj
COPY ./src/ ./
WORKDIR ./src/test/
RUN dotnet publish -c $BUILDCONFIG -o out /p:Version=$VERSION
FROM mcr.microsoft.com/dotnet/sdk:6.0
WORKDIR /app
COPY --from=build /src/test/out ./
EXPOSE 5000
ENTRYPOINT ["dotnet", "test.dll"]
Run Code Online (Sandbox Code Playgroud)
我得到以下输出:
=> ERROR [build 6/6] RUN dotnet publish -c RELEASE -o out /p:Version=1.0.0 2.5s
------
> [build 6/6] RUN dotnet publish -c RELEASE -o out /p:Version=1.0.0:
#11 0.511 Microsoft (R) Build Engine version 17.1.0+ae57d105c for .NET
#11 0.511 Copyright (C) Microsoft Corporation. All rights reserved.
#11 0.511
#11 0.931 Determining projects to restore...
#11 1.153 All projects are up-to-date for restore.
#11 2.400 CSC : error CS5001: Program does not contain a static 'Main' method suitable for an entry point [/src/test/test.csproj]
Run Code Online (Sandbox Code Playgroud)
我尝试了一些方法,包括将OutputTypecsproj 中的设置为 win/linux 以及我在其他线程中找到的一些其他建议,但最终我总是遇到相同的错误Exe。DockerDefaultTargetOS有什么想法可能是错误的吗?
该错误消息没有说明性。
真正的错误是在 线上COPY ./src/ ./。使用此命令,您可以将 src 文件夹 ( test )的内容复制到容器的根目录中。
应该是COPY ./src/ /src/或者(更好)./src /src
尝试注释掉除前 9 行之外的所有内容,构建容器并运行
docker run --rm -it <imagename> /bin/sh看看你自己。
由于您尝试构建一个空文件夹,编译器会引发未找到 main 方法的错误(实际上它找不到任何内容......)
| 归档时间: |
|
| 查看次数: |
3565 次 |
| 最近记录: |