You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Asp.Net Core WebAPI自包含发布到Docker的独立性及单目录部署问题

问题解答

1. 两个发布目录无差异的原因

你执行的第二条命令仅指定了运行时标识符-r linux-x64,未添加--no-self-contained参数:在.NET Core 3.0及以上版本中,指定-r参数时默认会启用自包含发布模式,所以两次命令实际生成的都是自包含包,自然没有明显差异。
如果要生成依赖系统dotnet运行时的框架依赖包,正确命令应为:

dotnet publish WebApi.csproj -c Release -o linux-dotnet --no-self-contained -r linux-x64

此时生成的linux-dotnet目录会比自包含目录小很多,仅包含应用本身的代码和第三方依赖,没有.NET运行时相关文件。

2. 单目录打包运行的实现方式

你需要的就是自包含发布模式,该模式会把.NET运行时、应用代码、所有依赖全部打包到同一个输出目录,不需要目标系统预先安装.NET运行时,完全可以在Docker容器中正常运行:

  • 发布时使用--self-contained -r linux-x64参数即可
  • Dockerfile的ENTRYPOINT不需要调用系统dotnet命令,直接执行输出目录中生成的同名可执行文件即可:
    ENTRYPOINT ["./MyProject.WebApi"]
    
    按该方式构建的镜像内不会存在系统级的dotnet相关文件,符合你的需求。

如果需要进一步缩小镜像体积,可以在发布命令中添加裁剪参数,删除未用到的框架代码:

dotnet publish WebApi.csproj -c Release -o linux-self-contained --self-contained -r linux-x64 /p:PublishTrimmed=true

3. Selenium部署方案说明

你后续找到的将Selenium部署在独立容器的方案确实是更优选择:

  • 避免了在应用镜像中打包浏览器、驱动等大型依赖,大幅减小应用镜像体积
  • 两个服务独立升级、维护,耦合度更低
  • 仅需要修改WebAPI中Selenium的连接地址为独立容器的访问地址即可,改造成本极低

内容的提问来源于stack exchange,提问作者MicMit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 11:45:04