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

切换Linux Docker容器后Angular/ASP.NET Core应用抛出TLS连接错误

问题解决步骤

1. 排查后端容器HTTPS配置问题

ASP.NET Core在Linux容器中运行时,无法自动复用Windows系统的自签名证书,这是导致TLS连接失败的核心原因之一,可按以下两种方案处理:

开发环境临时方案:禁用HTTPS,改用HTTP

  • 修改后端Program.cs,移除HTTPS监听配置,只启用HTTP:
var builder = WebApplication.CreateBuilder(args);
// 注释或删除HTTPS相关配置
// builder.WebHost.UseKestrel(options =>
// {
//     options.ListenAnyIP(5001, o => o.UseHttps());
// });
builder.WebHost.UseKestrel(options =>
{
    options.ListenAnyIP(5000); // 仅监听HTTP端口5000
});
// 其他业务代码保持不变
  • 更新Dockerfile,确保暴露5000端口:
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 5000 # 替换原80/443或新增该端口
# 其余Dockerfile内容不变
  • 修改前端代理配置(如proxy.conf.json或vite.config.ts),将目标地址改为HTTP协议:
{
  "/weatherforecast": {
    "target": "http://localhost:5000",
    "secure": false,
    "changeOrigin": true
  }
}

正式环境方案:为Linux容器配置自签名证书

  • 在Windows终端生成并信任自签名证书:
dotnet dev-certs https -ep "$env:USERPROFILE/.aspnet/https/TaskManagerSol.Server.pfx" -p 自定义密码
dotnet dev-certs https --trust
  • 通过Docker Compose挂载证书并配置环境变量(创建或修改docker-compose.yml):
services:
  backend:
    build: .
    ports:
      - "5000:5000"
      - "5001:5001"
    environment:
      - ASPNETCORE_URLS=https://+:5001;http://+:5000
      - ASPNETCORE_Kestrel__Certificates__Default__Password=自定义密码
      - ASPNETCORE_Kestrel__Certificates__Default__Path=/https/TaskManagerSol.Server.pfx
    volumes:
      - ~/.aspnet/https:/https:ro

2. 检查WSL网络与端口映射

WSL与Windows的localhost并非完全共享,可能导致前端无法通过localhost访问容器服务:

  • 打开PowerShell执行wsl hostname -I,获取WSL的IP地址
  • 尝试用该IP直接访问后端接口:curl http://WSL_IP:5000/weatherforecast
  • 如果能正常访问,修改前端代理配置的target为WSL的IP:
{
  "/weatherforecast": {
    "target": "http://192.168.xxx.xxx:5000",
    "secure": false,
    "changeOrigin": true
  }
}

3. 强制关闭前端代理的证书验证

如果后端使用自签名证书,前端代理必须禁用证书校验,否则Vite会拒绝建立连接:
在vite.config.ts中配置:

export default defineConfig({
  server: {
    proxy: {
      '/weatherforecast': {
        target: 'https://localhost:5001',
        secure: false, // 关键:关闭自签名证书验证
        changeOrigin: true
      }
    }
  }
});

4. 验证容器内后端服务状态

进入容器内部,确认服务是否正常监听端口:

# 进入容器
docker exec -it 容器ID bash
# 查看端口监听情况
netstat -tulpn
# 测试容器内部的接口请求
curl https://localhost:5001/weatherforecast

如果容器内部请求失败,说明后端自身的HTTPS配置存在问题,回到第一步重新调整。


内容的提问来源于stack exchange,提问作者Othman Birem

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 18:43:28