#docker-compose #build #dockerfile
Вопрос:
У меня есть файл Dockerfile, в котором больше строк, чем в этих:
FROM mcr.microsoft.com/dotnet/framework/sdk:4.8-20200211-windowsservercore-ltsc2016 AS BUILDER
WORKDIR c:src
COPY . .
RUN nuget restore
RUN dotnet clean ATTAboticsAutomation.sln
RUN dotnet build ATTAboticsAutomation.sln
...
Но я показываю их только в качестве последней строки (6) выше, где происходит сбой.
Вот как файл Dockerfile вызывается с помощью файла powershell, чтобы убедиться, что кэш очищен:
docker-compose.exe down
docker-compose.exe build --force-rm --no-cache
...
Это хорошо работает до этапа сборки:
Step 1/18 : FROM mcr.microsoft.com/dotnet/framework/sdk:4.8-20200211-windowsservercore-ltsc2016 AS BUILDER
---> 31f0c2ffa55d
Step 2/18 : WORKDIR c:src
---> Running in e90862540d44
Removing intermediate container e90862540d44
---> d45c73302955
Step 3/18 : COPY . .
---> ebdc0172b86b
Step 4/18 : RUN nuget restore
---> Running in be13a99099a1
MSBuild auto-detection: using msbuild version '16.4.0.56107' from 'C:Program Files (x86)Microsoft Visual Studio2019BuildToolsMSBuildCurrentbin'.
All packages listed in packages.config are already installed.
Removing intermediate container be13a99099a1
---> 8598338b6bd0
Step 5/18 : RUN dotnet clean ATTAboticsAutomation.sln
---> Running in e24add0bbdc5
Welcome to .NET Core 3.1!
---------------------
SDK Version: 3.1.101
Telemetry
---------
The .NET Core tools collect usage data in order to help us improve your experience. The data is anonymous. It is collected by Microsoft and shared with the community. You can opt-out of telemetry by setting the DOTNET_CLI_TELEMETRY_OPTOUT environment variable to '1' or 'true' using your favorite shell.
Read more about .NET Core CLI Tools telemetry: https://aka.ms/dotnet-cli-telemetry
----------------
Explore documentation: https://aka.ms/dotnet-docs
Report issues and find source on GitHub: https://github.com/dotnet/core
Find out what's new: https://aka.ms/dotnet-whats-new
Learn about the installed HTTPS developer cert: https://aka.ms/aspnet-core-https
Use 'dotnet --help' to see available commands or visit: https://aka.ms/dotnet-cli-docs
Write your first app: https://aka.ms/first-net-core-app
--------------------------------------------------------------------------------------
Microsoft (R) Build Engine version 16.4.0 e901037fe for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.
Build started 9/13/2021 8:33:05 PM.
1>Project "C:srcATTAboticsAutomation.sln" on node 1 (Clean target(s)).
1>ValidateSolutionConfiguration:
Building solution configuration "Debug|Any CPU".
1>Done Building Project "C:srcATTAboticsAutomation.sln" (Clean target(s)).
Build succeeded.
0 Warning(s)
0 Error(s)
Time Elapsed 00:00:00.98
Removing intermediate container e24add0bbdc5
---> 17b0f866d0bd
а затем терпит неудачу либо по:
1:
Step 6/18 : RUN dotnet build ATTAboticsAutomation.sln
---> Running in f3fb9e6940ce
Microsoft (R) Build Engine version 16.4.0 e901037fe for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.
Nothing to do. None of the projects specified contain packages to restore.
SpecFlowFeatureFiles: [redacted the list of files]
Stack overflow.
Stack overflow.
Removing intermediate container f3fb9e6940ce
ERROR: Docker build failed!
или 2:
Step 6/18 : RUN dotnet build ATTAboticsAutomation.sln
---> Running in f3fb9e6940ce
Microsoft (R) Build Engine version 16.4.0 e901037fe for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.
Nothing to do. None of the projects specified contain packages to restore.
SpecFlowFeatureFiles: [redacted the list of files]
C:Program Filesdotnetsdk3.1.101Microsoft.CSharp.CurrentVersion.targets(135,9): warning MSB3884: Could not find rule set file "ManagedMinimumRules.ruleset". [C:srcAutomationAutomation.csproj]
Stack overflow.
или 3:
Step 6/18 : RUN dotnet build ATTAboticsAutomation.sln
---> Running in f3fb9e6940ce
Microsoft (R) Build Engine version 16.4.0 e901037fe for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.
Nothing to do. None of the projects specified contain packages to restore.
SpecFlowFeatureFiles: [redacted the list of files]
C:Program Filesdotnetsdk3.1.101RoslynMicrosoft.CSharp.Core.targets(59,5): error MSB6006: "csc.dll" exited with code -1073741819. [C:srcAutomationAutomation.csproj]
1 Warning(s)
1 Error(s)
Это прекрасно работает в CI. Это просто локальная настройка докера, где это постоянно терпит неудачу.
Поискал в Интернете, но не смог найти ничего подходящего.
Единственное различие, которое я отметил между CI и приведенной выше настройкой, заключается в том, что в CI на шаге 4 все пакеты nuget восстанавливаются и устанавливаются. Но это не так в локальном запуске, как показано выше. Мне интересно, в этом ли проблема. Если это так, как бы я принудил пакеты nuget переустанавливаться каждый раз при локальном запуске?
Я не уверен, что это ошибка или есть что-то еще, на что неправильно ссылаются в процессе сборки.
Комментарии:
1. Вы используете изображение
sdk:4.8-20200211
, но затем строите с использованием net core, и почему вы используетеnuget restore
, а неdotnet restore
нет ?2. Использование nuget restore для восстановления пакетов nuget. Делает ли dotnet восстановление то же самое?