2017-09-13 70 views
1

我有一個.net核心應用程序,我想在docker上運行。 我使用VS Docker Tools'添加容器支持',並添加了一個docker-compose項目。Docker-compose on VSTS

當我建立它時,我得到使用我的重新編譯的.net核心應用程序和我的dockerfile構建的容器。

這裏是docker-compose.dcproj

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="15.0" Sdk="Microsoft.Docker.Sdk"> 
    <PropertyGroup Label="Globals"> 
    <ProjectVersion>2.0</ProjectVersion> 
    <DockerTargetOS>Linux</DockerTargetOS> 
    <ProjectGuid>a7cb971b-57ac-4704-851d-a322cf4f9e3f</ProjectGuid> 
    </PropertyGroup> 
    <ItemGroup> 
    <None Include="docker-compose.ci.build.yml" /> 
    <None Include="docker-compose.override.yml"> 
     <DependentUpon>docker-compose.yml</DependentUpon> 
    </None> 
    <None Include="docker-compose.yml" /> 
    </ItemGroup> 
</Project> 

以下是文件: docker-compose.yml

version: '3' 

services: 
    coresandbox: 
    image: coresandbox 
    build: 
     context: ./CoreSandbox 
     dockerfile: Dockerfile 

docker-compose.override.yml

version: '3' 

docker-compose.ci.build.yml

version: '3' 

services: 
    ci-build: 
    image: microsoft/aspnetcore-build:2.0 
    volumes: 
     - .:/src 
    working_dir: /src 
    command: /bin/bash -c "dotnet restore ./CoreSandbox.sln && dotnet publish ./CoreSandbox.sln -c Release -o ./obj/Docker/publish" 

現在我已經配置VSTS完成以下任務: 1.獲取源 2.構建服務 - 泊塢撰寫 的任務看起來相當基本的,我將所有默認設置到位 VSTS task screenshot

然後我從構建中獲取此日誌

/usr/local/bin/docker-compose -f /home/alex/testagent/_work/2/s/docker-compose.yml -f /home/alex/testagent/_work/2/s/docker-compose.ci.build.yml -f /home/alex/testagent/.docker-compose.1505284937228.yml -p newsroomly/CoreSandbox build 
Building coresandbox 
Step 1/10 : FROM microsoft/dotnet:2.0-runtime 
---> a2f5b3f42c0c 
Step 2/10 : ARG source 
---> Using cache 
---> 7a707828214b 
Step 3/10 : WORKDIR /app 
---> Using cache 
---> ff4262616387 
Step 4/10 : COPY ${source:-obj/Docker/publish} . 
Service 'coresandbox' failed to build: COPY failed: stat /var/lib/docker/tmp/docker-builder666656323/obj/Docker/publish: no such file or directory 
Building coresandbox 
Service 'coresandbox' failed to build: COPY failed: stat /var/lib/docker/tmp/docker-builder666656323/obj/Docker/publish: no such file or directory 
/usr/local/bin/docker-compose failed with return code: 1 

很明顯,問題是dotnet構建任務未運行之前,撰寫嘗試構建容器。

我也曾嘗試dotnet build my.sln但按這個問題:https://github.com/dotnet/cli/issues/6178這是不支持的,我得到error MSB4236: The SDK 'Microsoft.Docker.Sdk' specified could not be found.

看來,docker-compose.ci.build.yml意味着你做docker-compose -f docker-compose.ci.build.yml up,然後你做docker-compose -f docker-compose.yml build

然而,當我這樣做,我得到了同樣的錯誤有關缺失SDK

/src/docker-compose.dcproj : error MSB4236: The SDK 'Microsoft.Docker.Sdk' specified could not be found.

所以回到我的問題 - 如何建立我的VSTS

+0

如何根本不使用'docker-compose.ci.build.yml',有幫助嗎? –

+0

您是否使用託管代理或私人代理?您是否在Mac或Linux構建代理上運行構建? –

+0

Linux,私人。我發現一個解決方法將在稍後發佈。 – zaitsman

回答

0

這裏dcproj的解決方案 - VSTS CI/CD with docker and .NET Core 2.0 - Copy failed

我使用.NET Framework應用程序時,正好遇到同樣的問題。我使用了另一種解決方案,在VS解決方案構建步驟中,我不得不使用Release配置來構建,否則發佈文件夾將不會顯示。

你可以做的一件事是改變你的dockerfile中的這一行,我認爲這對我有幫助。 命令:

/bin/bash -c "dotnet restore ./CoreSandbox.sln && dotnet publish ./CoreSandbox.sln -c Release -o ./obj/Docker/publish" 

到 命令:

/bin/bash -c "dotnet restore ./CoreSandbox.sln && dotnet publish ./CoreSandbox.sln -c Release -o ./obj/Docker" 

我旋轉起來我的私人生成代理,它爲我節省了大量的時間,而不是在VSTS下載託管代理泊塢窗圖像。

0

/src/docker-compose.dcproj : error MSB4236: The SDK 'Microsoft.Docker.Sdk' specified could not be found.的修復程序是使用microsoft/aspnetcore-build:1.0-2.0圖像而不是microsoft/aspnetcore-build:2.0

2.0圖像缺少Microsoft.Docker.Sdk。這將在預覽版本2中從2.1開始修復。

+0

將部分文件部署到實際工作的配置項中有這種解決方法。不過,我已經離開使用'dcproj',它增加了0值和大量的開銷 – zaitsman