Docker组成VSTS任务失败者

我在Linux上使用MSSQL的Asp.Bet Core 2应用程序。 我想将CI和CDconfiguration为Azure。 我在Visual Studio Team Services中定义了docker-compose任务,但是出现错误。

2017-11-09T20:24:09.4725450Z ##[section]Starting: Create images 2017-11-09T20:24:09.4801610Z ============================================================================== 2017-11-09T20:24:09.4817660Z Task : Docker Compose 2017-11-09T20:24:09.4835680Z Description : Build, push or run multi-container Docker applications. Task can be used with Docker or Azure Container registry. 2017-11-09T20:24:09.4852370Z Version : 0.4.7 2017-11-09T20:24:09.4867100Z Author : Microsoft Corporation 2017-11-09T20:24:09.4881820Z Help : [More Information](https://go.microsoft.com/fwlink/?linkid=848006) 2017-11-09T20:24:09.4897520Z ============================================================================== 2017-11-09T20:24:10.5040990Z [command]/usr/local/bin/docker-compose -f /opt/vsts/work/1/s/docker-compose.yml -f /opt/vsts/work/1/s/docker-compose.ci.build.yml -f /home/vsts/agent/.docker-compose.1510259050468.yml -p Travelingowe build 2017-11-09T20:24:10.8628630Z db uses an image, skipping 2017-11-09T20:24:10.8646610Z Building api 2017-11-09T20:24:10.9373040Z Step 1/7 : FROM microsoft/aspnetcore:2.0 2017-11-09T20:24:12.0041790Z 2.0: Pulling from microsoft/aspnetcore 2017-11-09T20:25:03.6328690Z Digest: sha256:e36cb8d1edcd1bfd7aea0412349482a9c1a601089d76d1a294067f5f7f1098a9 2017-11-09T20:25:03.6497680Z Status: Downloaded newer image for microsoft/aspnetcore:2.0 2017-11-09T20:25:03.6524910Z ---> e0e49def2506 2017-11-09T20:25:03.6551560Z Step 2/7 : MAINTAINER Maciej Skuratowski <maciejskuratowski@gmail.com> 2017-11-09T20:25:03.7496070Z ---> Running in e7667861d293 2017-11-09T20:25:03.9222120Z ---> 24ba03484562 2017-11-09T20:25:03.9436840Z Removing intermediate container e7667861d293 2017-11-09T20:25:03.9458600Z Step 3/7 : ARG source 2017-11-09T20:25:04.0562980Z ---> Running in 7b57f9fc515f 2017-11-09T20:25:04.2292420Z ---> 4d07188edf18 2017-11-09T20:25:04.2503550Z Removing intermediate container 7b57f9fc515f 2017-11-09T20:25:04.2581270Z Step 4/7 : WORKDIR /app 2017-11-09T20:25:04.5347440Z ---> 4546b8dc771f 2017-11-09T20:25:04.5527690Z Removing intermediate container 0a595d10e668 2017-11-09T20:25:04.5558170Z Step 5/7 : EXPOSE 80 2017-11-09T20:25:04.6765650Z ---> Running in aa273cc9ca2c 2017-11-09T20:25:04.8330020Z ---> 6dd874db617e 2017-11-09T20:25:04.8619290Z Removing intermediate container aa273cc9ca2c 2017-11-09T20:25:04.8650100Z Step 6/7 : COPY ${source:-obj/Docker/publish} . 2017-11-09T20:25:04.8686070Z Service 'api' failed to build: COPY failed: stat /var/lib/docker/tmp/docker-builder211771018/obj/Docker/publish: no such file or directory 2017-11-09T20:25:04.9064960Z ##[error]db uses an image, skipping 2017-11-09T20:25:04.9127660Z ##[error]Building api 2017-11-09T20:25:04.9175860Z ##[error]Service 'api' failed to build: COPY failed: stat /var/lib/docker/tmp/docker-builder211771018/obj/Docker/publish: no such file or directory 2017-11-09T20:25:04.9258880Z ##[error]/usr/local/bin/docker-compose failed with return code: 1 2017-11-09T20:25:04.9325830Z ##[section]Finishing: Create images 

这是我的docker组成:

 version: '3' services: api: image: api container_name: api build: context: ./Api dockerfile: Dockerfile ports: - "8000:80" depends_on: - db db: image: "microsoft/mssql-server-linux" container_name: mssql environment: SA_PASSWORD: "testtest3030!" ACCEPT_EULA: "Y" MSSQL_PID: "Developer" ports: - "127.0.0.1:8001:1433" 

和docker-compose.ci.build.yml文件:

 version: '3' services: ci-build: image: microsoft/aspnetcore-build:1.0-1.1 volumes: - .:/src working_dir: /src command: /bin/bash -c "dotnet restore ./Travelingowe.sln && dotnet publish ./Travelingowe.sln -c Release -o ./obj/Docker/publish" 

此外,我附上我的VSTSdocker组成taks: 在这里输入图像说明

你有什么想法,我做错了吗?

啊哈,我前几天面对同样的问题。 你的问题在你的DockerFile里面。 例如,让我们看看我的文件:

 FROM microsoft/aspnetcore:2.0 ARG source WORKDIR /app EXPOSE 80 COPY ${source:-obj/Docker/publish} . ENTRYPOINT [ "dotnet","MyWeb.Api.dll" ] 

如果docker无法find您在COPY命令中指定的path,将会产生一个错误:

 Service 'api' failed to build: COPY failed: stat /var/lib/docker/tmp/docker-builder211771018/obj/Docker/publish: no such file or directory 

所以,基本上,你需要做的是修复你的构build版本的path(你需要确保文件在正确的文件夹中生成后)。

另外还有一个问题,如果你执行:

docker构build

它不构build解决scheme。 这就是为什么DockerFile找不到所需的文件夹。 如果您在docker-compose之前执行以下命令,它将会起作用。

 dotnet publish ./YourSolution.sln -c Release -o ./obj/Docker/publish 

关于错误,原因是没有obj / Docker /发布文件夹或文件。 (检查列昂尼德的答案)

docker-compose.ci.build.yml文件用于构build项目, docker-compose.yml文件用于运行项目,因此您需要通过docker-compose.ci.build.yml文件构build项目Dokcer-compose任务,然后用docker-compose.yml文件与Docker-compose任务build立/运行图像。

有一个关于docker-compose.ci.build.yml,docker-compose.yml和Dockerfile的线程: 带有linux docker 容器的Asp.net核心

更新:

请参阅以下步骤将项目部署到Azure:

  1. 创build一个新的构build定义
  2. 添加Docker Compose任务(Docker Compose文件: **/docker-compose.ci.build.yml ;操作: Run a Docker Compose command ;命令: run ci-build
  3. 添加复制文件任务(源文件夹: $(System.DefaultWorkingDirectory)/[your project path]/obj/Docker/publish ;目录: ** ;目标文件夹: $(Build.ArtifactStagingDirectory)
  4. 添加发布构build工件任务(发布path: $(Build.ArtifactStagingDirectory)
  5. 创build一个新的版本definitioin
  6. 添加Azure应用服务部署任务(包或文件夹: $(System.DefaultWorkingDirectory)/[artifact build definition name]/[artifact name] ;取消选中Publish using Web Deploy option