Asp.Net Core WebAPI [dotnet publish --self-contained -r linux-64] 放入Docker容器后是不是真的自包含
Posted
技术标签:
【中文标题】Asp.Net Core WebAPI [dotnet publish --self-contained -r linux-64] 放入Docker容器后是不是真的自包含【英文标题】:Asp.Net Core WebAPI [dotnet publish --self-contained -r linux-64] is it really self-contained after putting into Docker containerAsp.Net Core WebAPI [dotnet publish --self-contained -r linux-64] 放入Docker容器后是否真的自包含 【发布时间】:2022-01-09 15:11:29 【问题描述】:如果比较 linux-self-contained 和 linux-dotnet 文件夹,我在这 2 次发布运行后没有发现任何差异。
dotnet publish WebApi.csproj -c Release -o linux-self-contained --self-contained -r linux-x64
dotnet publish WebApi.csproj -c Release -o linux-dotnet -r linux-x64
是否有可能实现 dotnet(Linux 可执行文件)和任何其他先决条件将进入单个目录而不是 /usr/bin 的发布模式 它可以在 Docker 容器中工作吗?
ENTRYPOINT ["dotnet", "MyProject.WebApi.dll"]
目前如果浏览docker容器的内容
root@6e813cdc578d:/# find . -name dotnet
./usr/share/dotnet
./usr/share/dotnet/dotnet
./usr/bin/dotnet
单目录的概念似乎非常适用于--self-contained .Net Core Console App with
ENTRYPOINT ["./MyLittleConsoleProgram"]
我在生成的 Docker 映像中没有看到任何 dotnet 事件。
基本上,所有这些练习都是为了实现 How to run dotnet core app with Selenium in Docker
(第二个答案确实适用于控制台应用程序)
从那时起,事实证明在单独的容器中使用 selenium 是一种更好的方法,它只需要在 WebAPI 中更改一行代码。
【问题讨论】:
两种发布方式是一样的,因为self-contained
的默认值为true
【参考方案1】:
这两个命令是等价的。当您在dotnet publish WebApi.csproj -c Release -o linux-dotnet -r linux-x64
中使用-r
开关时,它会隐式启用--self-contained
。在 .NET 6 中,此命令将生成一个警告,告诉您应该显式提供 --self-contained
或 --no-self-contained
。因此,如果您想提供 RID 并且不想要自包含部署,则应包括 --no-self-contained
。
【讨论】:
以上是关于Asp.Net Core WebAPI [dotnet publish --self-contained -r linux-64] 放入Docker容器后是不是真的自包含的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET Core 2.2 WebAPI 405 方法不允许
带你做 WebAPI 迁移 ASP.NET Core 2.0