共用方式為


Docker Compose 組建屬性

除了控制個別 Docker 專案的屬性,如 Container Tools 建置屬性所述,您也可以藉由設定 MSBuild 用來建置解決方案的 Docker Compose 屬性,自定義 Visual Studio 如何建置 Docker Compose 專案。 您也可以在 Docker Compose 組態檔中設定檔案捲標,來控制 Visual Studio 調試程式如何執行 Docker Compose 應用程式。

如何設定 MSBuild 屬性

若要設定屬性的值,請編輯項目檔。 對於 Docker Compose 屬性,除非在下一節的數據表中另有指示,否則此項目檔是具有 .dcproj 擴展名的專案。 例如,假設您想要指定在開始偵錯時啟動瀏覽器。 您可以在 DockerLaunchAction 項目檔中設定 .dcproj 屬性,如下所示。

<PropertyGroup>
   <DockerLaunchAction>LaunchBrowser</DockerLaunchAction>
</PropertyGroup>

您可以將屬性設定新增至現有的 PropertyGroup 專案,或者如果沒有,請建立新的 PropertyGroup 專案。

Docker Compose MSBuild 屬性

下表顯示 Docker Compose 專案可用的 MSBuild 屬性(.dcproj 檔案)。

屬性名稱 描述
AdditionalComposeFilePaths 指定要針對所有命令傳送到 docker-compose.exe 的分號分隔清單中的其他撰寫檔案。 允許來自 Docker Compose 項目檔 (dcproj) 的相對路徑。
DependencyAwareStart 啟用支援 Docker Compose 屬性 depends_onhealthcheck之應用程式的不同方式,以控制服務啟動順序和健康情況檢查。

需要 Visual Studio 17.13 或更新版本。

默認值:False
DockerComposeBaseFilePath 指定 Docker Compose 檔案檔名的第一個部分,不含 .yml 擴展名。 例如:
1. DockerComposeBaseFilePath = null/undefined:使用基底檔案路徑 docker-compose,而檔案將命名為 docker-compose.ymldocker-compose.override.yml
2. DockerComposeBaseFilePath = mydockercompose:檔案將命名為 mydockercompose.ymlmydockercompose.override.yml
3. DockerComposeBaseFilePath = ..\mydockercompose:檔案會提高一個層級。

默認值:docker-compose
DockerComposeBuildArguments 指定要傳遞至 docker-compose build 命令的額外參數。 例如,--parallel --pull
DockerComposeDownArguments 指定要傳遞至 docker-compose down 命令的額外參數。 例如,--timeout 500
DockerComposeEnvFilePath 透過 docker compose傳遞至 --env-file 命令之 .env 檔案的相對路徑。 請參閱 使用 env_file 屬性

默認值:空白
DockerComposeProjectName 如果指定,會覆寫 Docker Compose 專案的項目名稱。

默認值:「dockercompose」 + 自動產生的哈希
DockerComposeProjectsToIgnore 指定要在偵錯期間由 Docker Compose 工具忽略的專案。 此屬性可用於任何專案。 檔案路徑可以指定兩種方式之一:
1. 相對於 dcproj。 例如,<DockerComposeProjectsToIgnore> path\to\AngularProject1.csproj </DockerComposeProjectsToIgnore>
2. 絕對路徑。
附註:路徑應該以分隔符分隔 ;
DockerComposeUpArguments 指定要傳遞至 docker-compose up 命令的額外參數。 例如,--timeout 500
DockerDevelopmentMode 控制用戶專案是否建置在容器中。 FastRegular 控件的允許值,Dockerfile 中 建置的階段。 [偵錯] 組態預設為 [快速] 模式,否則為 [一般] 模式。

預設值:Fast
DockerLaunchAction 指定要在 F5 或 Ctrl+F5 上執行的啟動動作。 允許的值為 None、LaunchBrowser 和 LaunchWCFTestClient。

默認值:無
DockerLaunchBrowser 指出是否要啟動瀏覽器。 如果指定 DockerLaunchAction,則會忽略 。

默認值:False
DockerServiceName 如果指定 DockerLaunchAction 或 DockerLaunchBrowser,DockerServiceName 會指定 docker-compose 檔案中參考的服務。
DockerServiceUrl 啟動瀏覽器時要使用的URL。 有效的取代令牌為 “{ServiceIPAddress}”、“{ServicePort}” 和 “{Scheme}”。 例如:{Scheme}://{ServiceIPAddress}:{ServicePort}
DockerTargetOS 建置 Docker 映射時所使用的目標 OS。

此外,DockerComposeProjectPath.csproj 項目檔中的屬性 .vbproj 會指定 Docker Compose 專案 (.dcproj) 檔案的相對路徑。 發佈服務專案以尋找儲存在 docker-compose.yml 檔案中的相關聯映像組建設定時,請設定此屬性。

如果您藉由將 docker-compose 設定為相對路徑來變更 DockerComposeBaseFilePath 檔案的位置,則您也必須確定組建內容已變更,以便參考方案資料夾。 例如,如果您的 docker-compose 檔案是名為 DockerComposeFiles的資料夾,則 Docker Compose 檔案應將組建內容設定為 “..” 或 “.”。/..“,視其相對於方案資料夾的位置而定。

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" Sdk="Microsoft.Docker.Sdk">
  <PropertyGroup Label="Globals">
    <ProjectVersion>2.1</ProjectVersion>
    <DockerTargetOS>Windows</DockerTargetOS>
    <ProjectGuid>154022c1-8014-4e9d-bd78-6ff46670ffa4</ProjectGuid>
    <DockerLaunchAction>LaunchBrowser</DockerLaunchAction>
    <DockerServiceUrl>{Scheme}://{ServiceIPAddress}{ServicePort}</DockerServiceUrl>
    <DockerServiceName>webapplication1</DockerServiceName>
    <DockerComposeBaseFilePath>DockerComposeFiles\mydockercompose</DockerComposeBaseFilePath>
    <AdditionalComposeFilePaths>AdditionalComposeFiles\myadditionalcompose.yml</AdditionalComposeFilePaths>
  </PropertyGroup>
  <ItemGroup>
    <None Include="DockerComposeFiles\mydockercompose.override.yml">
      <DependentUpon>DockerComposeFiles\mydockercompose.yml</DependentUpon>
    </None>
    <None Include="DockerComposeFiles\mydockercompose.yml" />
    <None Include=".dockerignore" />
  </ItemGroup>
</Project>

mydockercompose.yml 檔案看起來應該像這樣,建置內容設定為方案資料夾的相對路徑(在此案例中為 ..)。

version: '3.4'

services:
  webapplication1:
    image: ${DOCKER_REGISTRY-}webapplication1
    build:
      context: ..
      dockerfile: WebApplication1\Dockerfile

注意

DockerComposeBuildArguments、DockerComposeDownArguments 和 DockerComposeUpArguments 是 Visual Studio 2019 16.3 版的新功能。

覆寫 Visual Studio 的 Docker Compose 組態

通常 docker-compose.override.yml 用來覆寫 docker-compose.yml中的特定設定。 此外,Visual Studio 會產生覆寫檔案 docker-compose.vs.debug.g.yml(適用於 快速 模式)和 docker-compose.vs.release.g.yml(適用於 一般 模式)檔案,以及 Visual Studio 內執行應用程式的特定設定。 您可以將名為 docker-compose.vs.debug.yml 的檔案(適用於 Fast 模式)或 docker-compose.vs.release.yml(適用於 一般 模式)放在與 docker-compose.yml 檔案相同的目錄中,以覆寫這些 Visual Studio 設定。 以滑鼠右鍵按兩下 Docker Compose 專案,然後選取 [檔案總管] 中的 [開啟資料夾],然後使用 [新增>現有專案],將檔案新增至 Docker Compose 專案。

提示

若要瞭解任何 Visual Studio 設定的預設值,請查看中繼輸出目錄(例如,obj/Docker),以取得 docker-compose.vs.debug.g.ymldocker-compose.vs.release.g.yml。 這些檔案是由 Visual Studio 產生,不應修改。

Docker Compose 檔案標籤

docker-compose.vs.debug.ymldocker-compose.vs.release.yml中,您可以定義覆寫特定的標籤,如下所示:

services:
  webapplication1:
    labels:
      com.microsoft.visualstudio.debuggee.workingdirectory: "C:\\my_app_folder"

使用值周圍的雙引號,如上述範例所示,並使用反斜杠做為路徑反斜杠的逸出字元。

標籤名稱 描述
com.microsoft.visualstudio.debuggee.program 啟動偵錯時啟動的程式。 對於 .NET Core 應用程式,此設定通常會 dotnet
com.microsoft.visualstudio.debuggee.arguments 啟動偵錯時傳遞至程式的自變數。 對於 .NET Core 應用程式,這些自變數通常是 NuGet 套件的額外搜尋路徑,後面接著專案輸出元件的路徑。
com.microsoft.visualstudio.debuggee.workingdirectory 開始偵錯時用來做為起始目錄的目錄。 此設定通常是針對Linux容器 /app,或適用於 Windows 容器 C:\app
com.microsoft.visualstudio.debuggee.killprogram 此命令可用來停止在容器內執行的偵錯程式(必要時)。
標籤名稱 描述
com.microsoft.visualstudio.debuggee.program 啟動偵錯時啟動的程式。 對於 .NET Core 應用程式,此設定通常會 dotnet
com.microsoft.visualstudio.debuggee.arguments 啟動偵錯時傳遞至程式的自變數。 對於 .NET Core 應用程式,這些自變數通常是 NuGet 套件的額外搜尋路徑,後面接著專案輸出元件的路徑。
com.microsoft.visualstudio.debuggee.workingdirectory 開始偵錯時用來做為起始目錄的目錄。 此設定通常是針對Linux容器 /app,或適用於 Windows 容器 C:\app
com.microsoft.visualstudio.debuggee.killprogram 此命令可用來停止在容器內執行的偵錯程式(必要時)。
com.microsoft.visualstudio.debuggee.noattach.program 當您在 隔離進程中執行的 Azure Functions 專案中,使用 Start 時啟動的程式,而不偵錯 (+F5)。 一般而言,F5Ctrl+F5 使用相同的程式,但如果隔離程式中的任何項目類型,如 Azure Functions,都需要與 F5不同的程式,則會使用此專案。
com.microsoft.visualstudio.debuggee.noattach.arguments 當您在隔離進程中執行的 Azure Functions 專案中,使用 Start 而不偵錯 時傳遞至程式的自變數(Ctrl+F5)。
com.microsoft.visual-studio.project-name 項目的名稱,如果專案與 Dockerfile 不在相同的資料夾中,可協助 Visual Studio 尋找專案。

自訂 Docker 建置程式

您可以使用 target 屬性中的 build 設定,宣告 Dockerfile 中要建置的階段。 此覆寫只能用於 docker-compose.vs.debug.ymldocker-compose.vs.release.yml

services:
  webapplication1:
    build:
      target: customStage
    labels:
      ...

自訂應用程式啟動程式

您可以使用 entrypoint 設定啟動應用程式之前,先執行命令或自訂文稿,並使它相依於 DockerDevelopmentMode。 例如,如果您只需要在 Fast 模式中設定憑證,方法是執行 update-ca-certificates,但在 Regular 模式中,您只能 docker-compose.vs.debug.yml中新增下列程式代碼:

services:
  webapplication1:
    entrypoint: "sh -c 'update-ca-certificates && tail -f /dev/null'"
    labels:
      ...

如需詳細資訊,請參閱 容器進入點

後續步驟

如需 MSBuild 屬性的一般資訊,請參閱 MSBuild 屬性

另請參閱

Container Tools 建置屬性

容器工具啟動設定

在 Visual Studio 中管理 Docker Compose 的啟動設定檔

MSBuild 保留和已知屬性