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

如何在Docker中同时调试两个独立的Visual Studio 2022 .NET解决方案?

解决方案:独立.NET解决方案Docker并行调试与交互配置

一、修复端口冲突与启动失败问题

核心问题是容器端口、宿主映射端口、应用监听端口三者配置不一致,导致VS自动分配随机端口,进而引发浏览器连接错误。按以下步骤逐一修正:

1. 统一App2的端口配置(App1保留默认5000/5001)

(1)修改App2的launchSettings.json

确保应用监听端口、Docker映射端口完全匹配:

{
  "profiles": {
    "App2": {
      "commandName": "Project",
      "dotnetRunMessages": true,
      "launchBrowser": true,
      "launchUrl": "swagger",
      "applicationUrl": "https://*:8081;http://*:8080",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "Docker": {
      "commandName": "Docker",
      "launchBrowser": true,
      "launchUrl": "https://localhost:8081/swagger",
      "environmentVariables": {
        "ASPNETCORE_URLS": "https://*:8081;http://*:8080",
        "ASPNETCORE_HTTPS_PORT": "8081"
      },
      "httpPort": 8080,
      "sslPort": 8081,
      "sslContainerPort": 8081,
      "containerPort": 8080
    }
  }
}
  • applicationUrl用*允许容器内任意IP访问,避免绑定localhost导致容器外无法访问
  • launchUrl直接指定宿主端口8081,避免VS使用旧的5001地址
  • sslContainerPort和containerPort必须与Dockerfile的暴露端口一致

(2)修正App2的Dockerfile

确保暴露的端口与上述配置匹配:

# 其他构建步骤保持不变
EXPOSE 8080
EXPOSE 8081

注:EXPOSE仅为端口声明,实际映射关系由launchSettings.json的httpPort/sslPort控制

(3)验证端口映射

启动两个应用后,执行docker ps查看端口映射,应显示:

  • App1:0.0.0.0:5000->80/tcp, 0.0.0.0:5001->443/tcp
  • App2:0.0.0.0:8080->8080/tcp, 0.0.0.0:8081->8081/tcp

二、实现两个Docker容器的交互配置

由于两个解决方案独立,需通过自定义Docker网络实现容器间通信:

1. 创建共享Docker网络

打开终端执行:

docker network create app-shared-network

2. 配置容器加入共享网络

分别在两个应用的launchSettings.json的Docker节点中添加网络配置和固定容器名称:

App1的Docker节点新增:

"network": "app-shared-network",
"containerName": "app1-service"

App2的Docker节点新增:

"network": "app-shared-network",
"containerName": "app2-service"

3. 容器间调用配置

在代码中通过容器名称+容器内部端口调用对方接口:

  • 例如App1调用App2的接口,使用地址:https://app2-service:8081/api/xxx
  • 建议通过环境变量配置调用地址,方便切换本地/Docker环境:
    在App1的launchSettings.json的Docker环境变量中添加:
    "App2_BaseUrl": "https://app2-service:8081"
    
    代码中读取该变量:
    var app2BaseUrl = Environment.GetEnvironmentVariable("App2_BaseUrl") ?? "https://localhost:8081";
    var client = new HttpClient { BaseAddress = new Uri(app2BaseUrl) };
    

4. HTTPS证书信任(可选)

调试时若出现证书不信任错误,可在容器中挂载VS生成的开发证书:
在launchSettings.json的Docker节点中添加卷挂载:

"volumes": {
  "~/.aspnet/https:/https:ro"
}

同时添加环境变量指定证书路径:

"ASPNETCORE_Kestrel__Certificates__Default__Path": "/https/App2.pfx",
"ASPNETCORE_Kestrel__Certificates__Default__Password": "your-cert-password"

证书密码可在VS的Docker启动日志中找到,或通过dotnet dev-certs https -ep ~/.aspnet/https/App2.pfx -p your-password重新生成


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 16:10:32