如果应用程序由多个服务组成并使用 Docker Compose,则可以通过在 Docker Compose 启动设置中创建或编辑现有启动配置文件来配置运行和调试哪些服务。 启动配置文件允许您动态运行仅对您当前场景有重要影响的服务。 你可以从启动配置文件创建和选择,以便自定义调试体验并设置特定的启动操作,例如 Browser Launch URL。 你还可以选择单独选择每个服务或选择 Docker Compose 配置文件,这还将查看 Compose 文件以确定要运行的服务组。
有关 Docker Compose 配置文件的信息,请参阅使用 Compose 配置文件。
先决条件
- Visual Studio 2019 版本 16.10 或更高版本
- 使用 Docker Compose 进行容器编排的 .NET 解决方案
- Visual Studio
- 使用 Docker Compose 进行容器编排的 .NET 解决方案
管理启动设置
请考虑以下 Docker Compose 项目,其中 docker-compose.yml 有五个服务和三个 Compose 配置文件(Web、web1 和 web2)。
version: '3.9'
services:
  webapplication1:
    image: ${DOCKER_REGISTRY-}webapplication1
    profiles: [web, web1]
    build:
      context: .
      dockerfile: WebApplication1/Dockerfile
  webapplication2:
    image: ${DOCKER_REGISTRY-}webapplication2
    profiles: [web, web2]
    build:
      context: .
      dockerfile: WebApplication2/Dockerfile
  webapplication3:
    image: ${DOCKER_REGISTRY-}webapplication3
    profiles: [web]
    build:
      context: .
      dockerfile: WebApplication3/Dockerfile
  external1:
    image: redis
  external2:
    image: redis
有几个选项可用于打开 Docker Compose 启动设置对话框:
- 在 Visual Studio 中,选择 调试>管理 Docker Compose 启动设置:     
- 右键单击 Visual Studio - docker-compose项目,然后选择 管理 Docker Compose 启动设置    
- 使用快速启动(Ctrl+Q)并搜索 Docker Compose 以查找相同的命令。 
在下面的示例中,web1 Compose 配置文件处于选中状态,这将对“服务”列表进行筛选,使该配置文件中仅包含五个服务中的三个服务:
 "Screenshot of launch settings dialog box"“启动设置对话框的屏幕截图”
"Screenshot of launch settings dialog box"“启动设置对话框的屏幕截图”
说明
Docker Compose 配置文件部分仅在 docker-compose.yml 文件中定义了配置文件时才会出现。
下一个示例演示在单个服务之间进行选择,而不是筛选 Compose 配置文件中的服务。 在这里,我们展示创建名为 test2 的新启动配置文件后对话框的外观,该配置文件仅启动五个服务中的两个,即包含调试的 webapplication1 和不包含调试的 webapplication2。 当应用程序启动时,此启动配置文件还会启动浏览器,并将其打开到 webapplication1主页。
               
              
            
此信息保存在 launchSettings.json 中,如下所示
{
    "profiles": {
      "test2": {
        "commandName": "DockerCompose",
        "composeLaunchServiceName": "webapplication1",
        "serviceActions": {
          "external1": "DoNotStart",
          "external2": "DoNotStart",
          "webapplication1": "StartDebugging",
          "webapplication2": "StartWithoutDebugging",
          "webapplication3": "DoNotStart"
        },
        "composeLaunchAction": "LaunchBrowser",
        "commandVersion": "1.0",
        "composeLaunchUrl": "{Scheme}://localhost:{ServicePort}"
      }
   }
}
创建使用 Docker Compose 配置文件的启动配置文件
还可以通过创建使用 Compose 配置文件的 Visual Studio 启动配置文件来进一步自定义启动行为。
要创建其他使用 Compose 配置文件的配置文件,请选择“使用 Docker Compose 配置文件”并选择 web1。 现在,启动配置文件包括三个服务:webapplication1(属于 web 和 web1 Compose 配置文件)、external1和 external2。 默认情况下,不带源代码的服务(如 external1 和 external2)具有默认操作 启动,而无需调试。 包含源代码的 .NET 应用程序默认为“启动调试”。
重要
如果服务未指定 Compose 配置文件,则会隐式包含在所有 Compose 配置文件中。
               
              
            
此信息将保存,如以下代码所示。 除非更改默认操作,否则不会保存服务的配置及其默认操作。
{
  "profiles": {
    "test1": {
      "commandName": "DockerCompose",
      "composeProfile": {
         "includes": [
            "web1"
         ]
      },
      "commandVersion": "1.0"
    }
  }
}
此外,还可以将 webapplication1 的操作更改为“启动(不调试)”。 然后,launchSettings.json 中的设置如下所示:
{
  "profiles": {
    "test1": {
        "commandName": "DockerCompose",
        "composeProfile": {
          "includes": [
              "web1"
              ],
          "serviceActions": {
              "webapplication1": "StartWithoutDebugging"
          }
        },
    "commandVersion": "1.0"
    }
  }
}
属性
下面是 launchSettings.json中每个属性的说明:
| 财产 | 描述 | 
|---|---|
| commandName | 命令的名称。 默认值为“DockerCompose” | 
| commandVersion | 用于管理 DockerCompose 启动配置文件架构的版本号。 | 
| composeProfile | 定义启动配置文件定义的父属性。 其子属性是 includes和serviceActions | 
| composeProfile - 包括 | 构成启动配置文件的 Compose 配置文件名称列表。 | 
| composeProfile - serviceActions | 列出选定的 Compose 配置文件、服务以及每个服务的启动操作 | 
| serviceActions | 列出所选服务和启动操作。 | 
| composeLaunchAction | 指定要对 F5 或 Ctrl+F5执行的启动操作。 允许的值为 None、LaunchBrowser 和 LaunchWCFTestClient。 | 
| composeLaunchUrl | 启动浏览器时要使用的 URL。 有效的替换令牌为“{ServiceIPAddress}”、“{ServicePort}”和“{Scheme}”。 例如:{Scheme}://{ServiceIPAddress}:{ServicePort} | 
| composeLaunchServiceName | 指定用于替换 composeLaunchUrl 中的令牌的服务。 |