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

能否在IIS上托管Docker容器内的.NET 8应用?

能否在IIS上托管Docker容器内的.NET 8应用?

嘿,咱们先直接说结论:你没办法只靠当前的Dockerfile直接把容器“托管”到IIS上——因为IIS是Windows原生的Web服务器,而Docker容器是一个独立的隔离环境,两者的运行逻辑不太一样。不过别担心,有几种简单的方式能达成你的目标:让局域网用户通过IP访问你容器里的.NET 8应用。

方案一:直接运行Windows容器,暴露端口给局域网

你的Dockerfile用的是windowsservercore-ltsc2019基础镜像,属于Windows容器,这一步很适配Windows环境。你只需要:

  • 先补全你的Dockerfile(看你贴的内容最后sdk:8.0-wi没写完,应该是sdk:8.0-windowsservercore-ltsc2019,还要补充构建阶段的代码复制、发布步骤,比如:
    FROM mcr.microsoft.com/dotnet/sdk:8.0-windowsservercore-ltsc2019 AS build
    WORKDIR /src
    COPY ["YourProject.csproj", "."]
    RUN dotnet restore "./YourProject.csproj"
    COPY . .
    WORKDIR "/src/."
    RUN dotnet build "YourProject.csproj" -c Release -o /app/build
    
    FROM build AS publish
    RUN dotnet publish "YourProject.csproj" -c Release -o /app/publish /p:UseAppHost=false
    
    FROM mcr.microsoft.com/dotnet/aspnet:8.0-windowsservercore-ltsc2019 AS base
    WORKDIR /app
    EXPOSE 8080
    EXPOSE 8081
    COPY --from=publish /app/publish .
    ENTRYPOINT ["dotnet", "YourProject.dll"]
    
  • 构建镜像后,运行容器时做端口映射,把容器的端口映射到宿主机的端口:
    docker run -d -p 80:8080 -p 443:8081 your-image-tag
    
  • 最后打开宿主机的防火墙,允许80和443端口的入站请求,这样局域网里的用户直接输入http://你的宿主机IP就能访问应用了。这种方式完全不需要IIS,直接用Docker暴露端口就行,是最直接的方案。

方案二:用IIS做反向代理指向Docker容器

如果你一定要用到IIS(比如已有IIS环境需要整合),可以把IIS当成反向代理,把用户的请求转发到Docker容器:

  • 先在Windows上安装IIS的两个必要模块:Application Request Routing (ARR) 和 URL Rewrite
  • 在IIS里创建一个新网站,绑定你想要的域名或IP端口(比如绑定宿主机的80端口)
  • 给这个网站配置URL重写规则:添加一个反向代理规则,把所有请求转发到http://localhost:8080(也就是Docker容器暴露的端口)
  • 确保容器正常运行,并且端口映射正确(比如-p 8080:8080),这样用户访问IIS的站点地址时,请求会被转发到容器里的应用。

补充提醒

不管用哪种方案,都要确保你的MySQL服务能被容器里的.NET应用访问到——如果MySQL也在Docker容器里,要把它们放到同一个Docker网络里;如果MySQL在宿主机或局域网其他机器,要确保容器能访问到对应的IP和端口。

备注:内容来源于stack exchange,提问作者Eduardo Ramos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 16:18:10