How can I solve COPY failed: file not found in build context or excluded in Azure Pipeline?

16,469

You can try to add buildContext parameter in the Docker task.

buildContext: Path to the build context

Here is a case you can refer to.

Share:
16,469
Penguen
Author by

Penguen

Updated on June 05, 2022

Comments

  • Penguen
    Penguen almost 2 years

    I got stuck very interesting issue with azure pipeline. The issue is "Forbidden path outside the build context".If you have an add line in the Dockerfile which points to another directory, the build of the image fails with the message "Forbidden path".How can I solve this?

    I was recently attempting to Dockerize a C# project, so I added a docker folder to the project and created a simple Dockerfile to get started like below:

    Error:

    f83e9c616794: Pulling fs layer
    9887694812e5: Pulling fs layer
    9887694812e5: Verifying Checksum
    9887694812e5: Download complete
    dd4da9d953fb: Verifying Checksum
    dd4da9d953fb: Download complete
    f83e9c616794: Verifying Checksum
    f83e9c616794: Download complete
    dd4da9d953fb: Pull complete
    f83e9c616794: Pull complete
    9887694812e5: Pull complete
    Digest: sha256:85ea9832ae26c70618418cf7c699186776ad066d88770fd6fd1edea9b260379a
    Status: Downloaded newer image for mcr.microsoft.com/dotnet/sdk:5.0
     ---> bd73c72c93a1
    Step 5/25 : WORKDIR /src
     ---> Running in b457b1934a7e
    Removing intermediate container b457b1934a7e
     ---> a50c5df6f929
    Step 6/25 : COPY ["./src/xxxxx.Web/xxxxx.Web.csproj", "src/xxxxx.Web/"]
    COPY failed: file not found in build context or excluded by .dockerignore: stat src/xxxxx.Web/xxxxx.Web.csproj: file does not exist
    ##[error]COPY failed: file not found in build context or excluded by .dockerignore: stat src/xxxxx.Web/xxxxx.Web.csproj: file does not exist
    ##[error]The process '/usr/bin/docker' failed with exit code 1
    Finishing: Build and push an image to container registry
    

    DockerFiles/Dockerfile.xxxxx.Web:

    FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
    WORKDIR /app
    EXPOSE 80
    
    FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
    WORKDIR /src
    COPY ["src/xxxxx.Web/xxxxx.Web.csproj", "src/xxxxx.Web/"]
    RUN dotnet restore "src/xxxxx.Web/xxxxx.Web.csproj"
    COPY . .
    WORKDIR "/src/src/xxxxx.Web"
    RUN dotnet build "xxxxx.Web.csproj" -c Release -o /app
    
    FROM build AS publish
    RUN dotnet publish "xxxxx.Web.csproj" -c Release -o /app
    
    FROM base AS final
    WORKDIR /app
    COPY --from=publish /app .
    ENTRYPOINT ["dotnet", "xxxxx.Web.dll"]
    

    azure-pipeline.yml:

     # Deploy to Azure Kubernetes Service
    # Build and push image to Azure Container Registry; Deploy to Azure Kubernetes Service
    # https://docs.microsoft.com/azure/devops/pipelines/languages/docker
    
    trigger:
    - test
    
    
    variables:
    
      # Container registry service connection established during pipeline creation
      dockerRegistryServiceConnection: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
      imageRepository: 'xxxxxxxx'
      containerRegistry: 'xxxxxxxxxxxx.azurecr.io'
      dockerfilePath: '**/DockerFiles/Dockerfile.xxxxx.Web'
      tag: '$(Build.BuildNumber)'
    
      # Agent VM image name
      vmImageName: 'ubuntu-latest'
    
    
    stages:
    - stage: Build
      displayName: Build stage
      jobs:
      - job: Build
        displayName: Build
        pool:
          vmImage: $(vmImageName)
        steps:
        - task: Docker@2
          displayName: Build and push an image to container registry
          inputs:
            command: buildAndPush
            repository: $(imageRepository)
            dockerfile: $(dockerfilePath)
            containerRegistry: $(dockerRegistryServiceConnection)
            tags: |
              $(tag)
    
        - publish: manifests
          artifact: manifests
    
    - stage: Deploy
      displayName: Deploy stage
      dependsOn: Build
    
      jobs:
      - deployment: Deploy
        displayName: Deploy-xxxxx.Web
        pool:
          vmImage: $(vmImageName)
        environment: 'xxxxx-5982.default'
        strategy:
          runOnce:
            deploy:
              steps:
    
    
              - task: KubernetesManifest@0
                displayName: Deploy to Kubernetes cluster
                inputs:
                  action: deploy
                  manifests: |
                    $(Pipeline.Workspace)/manifests/deployment.eventhub.web.yml
                    $(Pipeline.Workspace)/manifests/service.eventhub.web.yml
                  containers: |
                    $(containerRegistry)/$(imageRepository):$(tag)
    
    

    How can I solve "COPY failed: Forbidden path outside the build context"? I want to use Dockerfile in DockerFiles Directory.