【问题标题】:Docker compose VSTS task failderDocker 撰写 VSTS 任务失败
【发布时间】:2018-04-22 23:22:15
【问题描述】:

我正在使用 Linux 上的 MSSQL 开发 Asp.Bet Core 2 应用程序。我想将 CI 和 CD 配置到 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-compose:

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"

我还附上了我的 VSTS docker-compose 任务:

你知道我做错了吗?

【问题讨论】:

  • 似乎您将/var/lib/docker/tmp/docker-builder211771018/obj/Docker/publish 作为参数传递,并且此路径不存在。你检查它是否有效?
  • 你们用我的解决方案解决了这个问题吗? (用部署到 azure 的详细步骤更新了答案)

标签: azure docker asp.net-core docker-compose azure-devops


【解决方案1】:

啊哈,几天前我遇到了同样的问题。您的问题在您的 DockerFile 中。例如,让我们看一下我的文件:

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

如果 docker 找不到您在 COPY 命令中指定的路径,则会产生错误:

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

所以,基本上,您需要做的是修复您的构建发布路径(您需要确保构建后的文件位于正确的文件夹中)。

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

docker-compose 构建

它不会构建解决方案。这就是 DockerFile 找不到所需文件夹的原因。如果您在 docker-compose 之前执行以下命令,它将起作用。

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

【讨论】:

    【解决方案2】:

    关于错误,原因是没有 obj/Docker/publish 文件夹或文件。 (查看Leonid的答案)

    docker-compose.ci.build.yml 文件用于构建项目,docker-compose.yml 文件用于运行项目,因此您需要使用 Dokcer-compose 任务通过docker-compose.ci.build.yml 文件构建项目,然后使用构建/运行映像docker-compose.yml 带有 Docker-compose 任务的文件。

    有一个关于docker-compose.ci.build.yml、docker-compose.yml和Dockerfile的帖子:Asp.net core with linux docker container

    更新:

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

    1. 创建新的构建定义
    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.ArtifactStagingDirectory)
    5. 创建新版本定义
    6. 添加 Azure 应用服务部署任务(包或文件夹:$(System.DefaultWorkingDirectory)/[artifact build definition name]/[artifact name];取消选中 Publish using Web Deploy option

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-25
      • 2019-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多