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

如何将已发布.NET Core Web API与selenium/standalone-chrome合并为单个Docker容器

问题根源

你当前的多阶段构建仅拷贝了发布后的应用文件,未将.NET运行时同步到最终镜像中:selenium/standalone-chrome 镜像本身未预装ASP.NET 3.1运行时,因此系统找不到dotnet命令。

可行方案

两种方案均不会将dotnet publish步骤写入Dockerfile,符合你的基础设施限制要求。

方案1:使用自包含发布(推荐,无需修改镜像层)

你已经指定了linux-x64运行时标识,只需在发布时开启自包含选项,把.NET运行时一起打包到发布产物中,不需要依赖镜像预装dotnet:

  1. 调整本地发布命令:
dotnet publish WebApi.csproj -c Release -o out_linux -r linux-x64 --self-contained true
  1. 修改Dockerfile,无需多阶段构建:
FROM selenium/standalone-chrome
WORKDIR /app
COPY . ./
# 自包含发布后可直接执行应用可执行文件,也可以用./dotnet调用dll
ENTRYPOINT ["./MyProject.WebApi"]
# 若需要保留dotnet调用方式可替换为:ENTRYPOINT ["./dotnet", "MyProject.WebApi.dll"]

方案2:在Selenium镜像内手动安装ASP.NET运行时

如果不想使用自包含发布,可以基于Selenium镜像手动安装对应版本的.NET运行时:

FROM selenium/standalone-chrome
# 切换到root用户安装依赖
USER root
RUN apt-get update && apt-get install -y wget apt-transport-https \
    && wget https://packages.microsoft.com/config/debian/10/packages-microsoft-prod.deb -O packages-microsoft-prod.deb \
    && dpkg -i packages-microsoft-prod.deb \
    && apt-get update \
    && apt-get install -y aspnetcore-runtime-3.1 \
    && rm -rf /var/lib/apt/lists/* packages-microsoft-prod.deb
# 切回Selenium默认用户避免权限异常
USER 1200
WORKDIR /app
COPY . ./
ENTRYPOINT ["dotnet", "MyProject.WebApi.dll"]
注意事项
  • 容器内运行Selenium Chrome时,需要添加启动参数 --no-sandbox --disable-dev-shm-usage 避免权限不足报错
  • 若使用方案2且Selenium镜像基于更高版本Debian,只需将微软源地址中debian/10替换为对应系统版本号即可

内容的提问来源于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 09:09:07