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.yml 和 docker-compose.override.yml。2.DockerComposeBaseFilePath = mydockercompose:檔案將命名為 mydockercompose.yml 和 mydockercompose.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 | 控制使用者專案是否建置在容器中。 允許的 Fast 或 Regular 值會控制哪些階段建置在 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.yml 或 docker-compose.vs.release.g.yml 的中繼輸出目錄 (例如 obj/Docker)。 這些檔案是由 Visual Studio 產生,且不應修改。
Docker Compose 檔案標籤
在 docker-compose.vs.debug.yml 或 docker-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 | 此命令可用來停止在容器內執行的偵錯程式 (必要時)。 |
自訂 Docker 建置程序
您可以使用 build
屬性中的 target
設定,宣告要在 Dockerfile 中建置的階段。 此覆寫只能用於 docker-compose.vs.debug.yml 或 docker-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 屬性。