我有一个.net核心应用程序,我想在docker上运行。
我使用VS Docker Tools“添加容器支持”,并添加了docker-compose
项目。
当我构建它时,我使用我重新编译的.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.构建服务 - Docker Compose 该任务看起来相当基本,我保留了所有默认值
然后我从构建
获取此日志/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上构建我的dcproj
答案 0 :(得分:0)
以下是解决方案 - VSTS CI/CD with docker and .NET Core 2.0 - Copy failed
使用.Net framework app时遇到完全相同的问题。我使用了另一种解决方案,在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中的托管代理上下载docker镜像。
答案 1 :(得分: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.1中从预览2开始修复。