共用方式為


Docker Compose 組建屬性

除了控制個別 Docker 專案的屬性,如容器工具建置屬性中所述,您也可以藉由設定 MSBuild 用來建置方案的 Docker Compose 屬性,自訂 Visual Studio 建置 Docker Compose 專案的方式。 您也可以在 Docker Compose 組態檔中設定檔案標籤,以控制 Visual Studio 偵錯工具執行 Docker Compose 應用程式的方式。

如何設定 MSBuild 屬性

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

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

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

Docker Compose MSBuild 屬性

下表顯示 Docker Compose 專案可用的 MSBuild 屬性。

屬性名稱 位置 描述 預設值
AdditionalComposeFilePaths dcproj 指定要針對所有命令傳送至 docker-compose.exe 的分號分隔清單中的其他 Compose 檔案。 允許來自 Docker Compose 項目檔 (dcproj) 的相對路徑。 -
DockerComposeBaseFilePath dcproj 指定 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 dcproj 指定要傳遞至 docker-compose build 命令的額外參數。 例如: --parallel --pull
DockerComposeDownArguments dcproj 指定要傳遞至 docker-compose down 命令的額外參數。 例如: --timeout 500 -
DockerComposeEnvFilePath dcproj 傳遞至 docker compose 命令 --env-file之 .env 檔案的相對路徑。 請參閱 使用 env_file 屬性 空的
DockerComposeProjectName dcproj 如果指定,會覆寫 Docker Compose 專案的項目名稱。 「dockercompose」+ 自動產生的雜湊
DockerComposeProjectPath csproj 或 vbproj Docker Compose 專案 (dcproj) 檔案的相對路徑。 設定此屬性以在發佈服務專案時尋找儲存在 docker-compose.yml 檔案中的相關聯映像組建設定。 -
DockerComposeProjectsToIgnore dcproj 指定要在偵錯期間由 Docker Compose 工具忽略的專案。 此屬性可用於任何專案。 檔案路徑可以透過兩種方式之一來指定:
1.相對於 dcproj。 例如: <DockerComposeProjectsToIgnore>path\to\AngularProject1.csproj</DockerComposeProjectsToIgnore>
2.絕對路徑。
注意:路徑應該以分隔符號 ;分隔。
-
DockerComposeUpArguments dcproj 指定要傳遞至 docker-compose up 命令的額外參數。 例如: --timeout 500 -
DockerDevelopmentMode dcproj 控制使用者專案是否建置在容器中。 允許的 FastRegular 值會控制哪些階段建置在 Dockerfile 中。 [偵錯] 組態預設為 Fast 模式,否則為 Regular 模式。 快速
DockerLaunchAction dcproj 指定要在按下 F5 或 Ctrl+F5 時執行的啟動動作。 允許的值為 None、LaunchBrowser 和 LaunchWCFTestClient。
DockerLaunchBrowser dcproj 指出是否要啟動瀏覽器。 如果指定 DockerLaunchAction,則會忽略。 False
DockerServiceName dcproj 如果指定 DockerLaunchAction 或 DockerLaunchBrowser,則 DockerServiceName 會指定檔案中 docker-compose 參考的服務隨即啟動。 -
DockerServiceUrl dcproj 啟動瀏覽器時要使用的 URL。 有效的取代權杖為 「{ServiceIPAddress}」、「{ServicePort}」和「{Scheme}」。 例如:{Scheme}://{ServiceIPAddress}:{ServicePort} -
DockerTargetOS dcproj 建置 Docker 映像時所使用的目標 OS。 -

範例

如果您藉由將 設定DockerComposeBaseFilePath為相對路徑來變更檔案的位置docker-compose,則您也必須確定組建內容已變更,以便參考方案資料夾。 例如,如果您的 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 (適用於 Regular 模式)的檔案放在 與 docker-compose.yml 檔案相同的目錄中,以覆寫這些 Visual Studio 設定。 以滑鼠右鍵按兩下 Docker Compose 項目,然後選取 [檔案總管 中的 [開啟資料夾],然後使用 [新增>現有專案] 將檔案新增至 Docker Compose 專案。

提示

若要了解任何 Visual Studio 設定的預設值,請查看 docker-compose.vs.debug.g.ymldocker-compose.vs.release.g.yml 的中繼輸出目錄 (例如 obj/Docker)。 這些檔案是由 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"

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

Label name 描述
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 此命令可用來停止在容器內執行的偵錯程式 (必要時)。
Label name 描述
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 但不偵錯時啟動的程式(Ctrl+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 建置程序

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

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

自訂應用程式啟動程序

使用 entrypoint 設定來啟動應用程式之前,您可以執行命令或自訂指令碼,並使它相依於 DockerDevelopmentMode。 例如,如果您需要只在快速模式中設定憑證,方法是執行update-ca-certificates,而不是在 [一般] 模式中設定憑證,則只能在 docker-compose.vs.debug.yml新增下列程式代碼:

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

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

下一步

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

另請參閱

容器工具建置屬性

容器工具啟動設定

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

MSBuild 保留和已知屬性