能否在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
相关产品推荐
相关产品推荐

