本地调试.NET MVC应用正常,Docker容器调用遇SSL及连接问题
解决Docker Host网络容器调用Windows主机MVC调试接口的SSL与主机名问题
问题背景
- Windows主机通过VS Code按F5调试MVC应用时,本地访问
https://localhost:1234/health/status正常,无需手动配置证书 - 采用Host网络模式的Docker容器调用同一接口时,先触发SSL证书错误;使用
curl -k/--insecure跳过证书校验后,返回Bad Request - Invalid Hostname - 排查发现
dotnet dev-certs无有效证书,调整IIS Express的netsh URL预留后,容器调用localhost出现连接拒绝
解决步骤
- 修改
launchsettings.json的applicationUrl
将仅绑定localhost的地址,新增主机IPv4地址绑定(保留localhost方便本地调试),示例配置:"applicationUrl": "https://localhost:1234;https://192.168.1.100:1234" - 更新
applicationhost.config的绑定配置
找到项目.vs/{项目名称}/config目录下的applicationhost.config,在bindings节点添加主机IPv4的绑定项:<binding protocol="https" bindingInformation="*:1234:192.168.1.100" /> - 以管理员身份启动VS Code
确保VS Code拥有权限修改URL预留及证书相关配置 - 容器内调用接口
使用主机IPv4地址而非localhost,搭配-k选项跳过证书校验,执行命令:curl -k https://192.168.1.100:1234/health/status
关键原因
- Host网络模式下,容器的
localhost指向自身而非主机,必须使用主机实际IPv4地址访问 - 原配置仅绑定localhost,非localhost请求会触发IIS Express的主机名校验,导致
Invalid Hostname错误 - 管理员权限确保VS Code能正确配置IIS Express的地址绑定及相关系统权限
内容的提问来源于stack exchange,提问作者dot
相关产品推荐
相关产品推荐

