VSTS无法构建docker镜像

时间:2018-05-22 09:08:02

标签: c# docker visual-studio-2017 docker-compose azure-devops

我有一个简单的开箱即用VS2017 web api,我正在尝试在VSTS上构建Docker镜像并将图像发布到Azure容器注册表。但它不起作用,错误如下:

2018-05-21T16:49:45.8481201Z Step 7/17 : COPY WebApi/WebApi.csproj WebApi/
2018-05-21T16:49:45.8503445Z COPY failed: stat /var/lib/docker/tmp/docker-builder936381234/WebApi/WebApi.csproj: no such file or directory
2018-05-21T16:49:45.8644972Z ##[error]COPY failed: stat /var/lib/docker/tmp/docker-builder936381234/WebApi/WebApi.csproj: no such file or directory
2018-05-21T16:49:45.8732546Z ##[error]/usr/local/bin/docker failed with return code: 1

它是标准的VS2017解决方案。

Dockerfile

FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 63537
EXPOSE 44369

FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /src
COPY WebApi/WebApi.csproj WebApi/
RUN dotnet restore WebApi/WebApi.csproj
COPY . .
WORKDIR /src/WebApi
RUN dotnet build WebApi.csproj -c Release -o /app

FROM build AS publish
RUN dotnet publish WebApi.csproj -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "WebApi.dll"]

.dockerignore

.dockerignore
.env
.git
.gitignore
.vs
.vscode
docker-compose.yml
docker-compose.*.yml
*/bin
*/obj

搬运工-compose.yml

version: '3.4'

services:
  webapi:
    image: webapi
    build:
      context: .
      dockerfile: WebApi/Dockerfile

我通过更改.dockerignore文件,删除它等等尝试了所有建议的解决方案。

5 个答案:

答案 0 :(得分:7)

它基于构建上下文来复制文件,默认情况下,使用默认构建上下文选项检查 Docker 任务,您需要取消选中此选项并且指定相应的路径(相同级别的解决方案),例如根文件夹.

答案 1 :(得分:0)

撰写文件中的context应为 - context: ./WebApi

正如其他答案中所提到的,Docker构建将目录作为context,这是构建映像所需的内容的根目录。

答案 2 :(得分:0)

我使用Docker而不是构建任务代理的Docker Compose任务。改为Docker Compose并指向Docker撰写文件就可以了。

答案 3 :(得分:0)

我的问题是我有一个不必要的Dockerfile位于子目录中。

由于VSTS默认情况下使用**/Dockerfile搜索Dockerfile,因此使用了此不必要的Dockerfile,从而导致错误的上下文。正确的Dockerfile被忽略。

答案 4 :(得分:0)

我在Visual Studio 2019上遇到了同样的问题。这就是为我解决的问题:

  1. 删除Dockerfile;将您的自定义内容复制到任何地方!
  2. 右键单击项目->添加-> Docker支持,这将生成一个新的Docker文件。复制您的自定义内容。
  3. 右键单击项目->编辑项目文件。
  4. 找到此行var bedwarsCoins = player.stats.Bedwars.coins并将其删除。