如何逐个将IIS应用迁移至VM上的Docker容器且保留原有URL路由
实现方案:不修改URL的前提下混合IIS与Docker部署
要在保留原有URL路由的同时,将单个Web API(如app3)迁移至Docker容器,核心思路是在IIS中添加反向代理规则,把针对/app3的请求转发到本地运行的Docker容器,其余路径仍由IIS处理。具体步骤如下:
1. 部署app3的Docker容器
- 确保app3的Docker镜像已构建完成,镜像中的应用以根路径(
/)处理请求(如果原app3在IIS中是虚拟应用,需调整容器内的路由配置,使其能接收不带/app3前缀的请求)。 - 在客户VM上启动容器,绑定本地回环地址的端口(避免直接暴露外网):
这里docker run -d -p 127.0.0.1:8083:80 --name app3-container your-app3-image:latest8083是VM本地的端口,80是容器内应用监听的端口,可根据实际情况调整。 - 测试容器连通性:在VM本地访问
http://127.0.0.1:8083/catalogs,确认app3能正常响应。
2. 配置IIS反向代理(依赖ARR与URL Rewrite)
- 先在IIS服务器上安装Application Request Routing (ARR) 和URL Rewrite模块(均为微软官方工具,可通过IIS管理器的“模块”功能安装)。
- 打开对应客户子域名的IIS网站,添加URL重写规则:
- 规则名称:
Route app3 to Docker Container - 匹配URL:
- 模式:
^app3/(.*)(正则表达式,捕获/app3后的所有路径) - 忽略大小写:勾选
- 模式:
- 操作设置:
- 操作类型:
反向代理 - 重写URL:
http://127.0.0.1:8083/{R:1}({R:1}对应捕获的路径部分,比如catalogs) - 勾选“启用反向代理”,并确保ARR的代理设置允许访问本地回环地址。
- 操作类型:
- 规则名称:
- 删除IIS中原有的app3虚拟应用,避免路径冲突。
3. 验证与调试
- 访问原URL
https://OurAmazingCustomer.OurCleverDomain.com/app3/catalogs,检查响应是否来自Docker容器。 - 测试其他路径(如/app1/customers、/app2/orders),确认仍由IIS正常处理。
- 若出现问题,可查看IIS的URL Rewrite日志和Docker容器的应用日志排查。
4. 额外优化建议
- 容器健康检查:给Docker容器添加健康检查规则,确保app3服务正常运行:
docker run -d -p 127.0.0.1:8083:80 --name app3-container --health-cmd "curl -f http://localhost/catalogs || exit 1" --health-interval 30s your-app3-image:latest - 日志统一:将IIS日志与Docker容器日志汇总到同一日志系统,方便问题排查。
- SSL处理:IIS已负责HTTPS的SSL终止,容器内无需配置证书,只需处理HTTP请求即可。
内容的提问来源于stack exchange,提问作者cResults
相关产品推荐
相关产品推荐

