Я создал основной веб-API ASP.NET и пытаюсь создать образ докера с помощью Azure DevOps, но при команде копирования возникают ошибки.
Ошибка (1):
ОШИБКА № 8: не удалось вычислить контрольную сумму ссылки e47e7669-35e6-4532-94ca-a2b577895d60::t0eq4p4a1jx7z8dkx4wqsmjq2: «/Weather.Library/Weather.Library.csproj»: не найдено
Ошибка (2):
ОШИБКА #9: не удалось вычислить контрольную сумму ссылки e47e7669-35e6-4532-94ca-a2b577895d60::t0eq4p4a1jx7z8dkx4wqsmjq2: «/Weather.API/Weather.API.csproj»: не найдено
Докер-файл:
#See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
ARG BUILD_CONFIGURATION=Release
WORKDIR /src
COPY ["Weather.API/Weather.API.csproj", "Weather.API/"]
COPY ["Weather.Library/Weather.Library.csproj", "Weather.Library/"]
RUN dotnet restore "./Weather.API/Weather.API.csproj"
COPY . .
WORKDIR "/src/Weather.API"
RUN dotnet build "./Weather.API.csproj" -c $BUILD_CONFIGURATION -o /app/build
FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "./Weather.API.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Weather.API.dll"]

Я проверил файлы вашего проекта и сообщение об ошибке.
Причина проблемы заключается в том, что при использовании задачи Docker в Azure DevOps Pipeline для рабочего каталога по умолчанию будет установлен тот же путь, что и для файла docker.
Чтобы решить проблемы в конвейере, вам необходимо переместить Dockerfile в корневой путь проекта.
Например:
- Folder Weather.API
- Folder Weather.Library
- dockerfile
- WeatherAPISolution.sln
Тогда файлы csproj можно будет успешно найти.
В качестве другого метода вы также можете изменить использование задачи script/bash для запуска команды docker и установки рабочего каталога.
Например:
steps:
- script: 'docker build -f Weather.API/Dockerfile -t imagename .'
workingDirectory: $(build.sourcesdirectory)
В этом случае в качестве рабочего каталога будет установлен корневой путь.
На следующем этапе сборки Docker вы можете столкнуться со следующей ошибкой в строке сборки dotnet:
CSC : error CS5001: Program does not contain a static 'Main' method suitable for an entry point
Чтобы решить эту проблему, вам необходимо скопировать файл проекта по пути: /src/Weather.API
COPY . /src/Weather.API
образец докер-файла:
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
ARG BUILD_CONFIGURATION=Release
WORKDIR /src
COPY ["Weather.API/Weather.API.csproj", "Weather.API/"]
COPY ["Weather.Library/Weather.Library.csproj", "Weather.Library/"]
RUN dotnet restore "./Weather.API/Weather.API.csproj"
COPY . /src/Weather.API
WORKDIR "/src/Weather.API"
RUN dotnet build "./Weather.API.csproj" -c $BUILD_CONFIGURATION -o /app/build
FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "./Weather.API.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Weather.API.dll"]
@RamadossE Рад знать, что это может вам помочь.
Я переместил Dockerfile в корневой путь проекта, и это сработало. Спасибо