kkamegawa's weblog

Visual Studio,TFS,ALM,VSTS,DevOps関係のことについていろいろと書いていきます。Google Analyticsで解析を行っています

Visual Studioで生成されたdockerfileではAzure Pipelinesでエラーになる

やるたびにはまって調べている気がするので、自分のためのメモです。Visual Studioでプロジェクト作るときに「Dockerサポートを追加」するとDockerfileおよび、docker-composeのプロジェクトが追加されます。ローカルではいいのですが、Azure Pipelines(に限らずたぶんCIでは)こんなエラーになります。

Step 7/26 : COPY ["kkdockerweb/kkdockerweb.csproj", "kkdockerweb/"]
 COPY failed: file not found in build context or excluded by .dockerignore: stat kkdockerweb/kkdockerweb.csproj: file does not exist
##[error]COPY failed: file not found in build context or excluded by .dockerignore: stat kkdockerweb/kkdockerweb.csproj: file does not exist
##[error]The process '/usr/bin/docker' failed with exit code 1

初期状態はこんなYAMLのはずです。

FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY ["kkdockerweb.csproj", "kkdockerweb/"]
RUN dotnet restore "kkdockerweb/kkdockerweb.csproj"
COPY . .
WORKDIR "/src/kkdockerweb"
RUN dotnet build "kkdockerweb.csproj" -c Release -o /app/build

エラーは2回目のCOPY . .です。なんでかというと、CIとローカルマシンでdocker buildするときの場所が違うからのようです。YAMLでbuildContextを指定するか、DockerfileのCOPYを直します。Dockerfileを直しました。

FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY ["kkdockerweb.csproj", "kkdockerweb/"]
RUN dotnet restore "kkdockerweb/kkdockerweb.csproj"
COPY . kkdockerweb/
WORKDIR "/src/kkdockerweb"
RUN dotnet build "kkdockerweb.csproj" -c Release -o /app/build