Восстановление Dotnet завершается неудачно в сборке Docker

Привет я пытаюсь dockerize ASP NET Core 2.1 приложение и docker build не удается при выполнении dotnet restore, Я уже проверил другие темы для этой конкретной проблемы
Попытка соединения с Nuget не удалась "Невозможно загрузить индекс сервиса для источника".

Решения, предоставленные там, не помогли мне.

Dockerfile

ARG serverPath=./Core/Server

FROM microsoft/dotnet:sdk AS build-env
WORKDIR /app


COPY ./Core/Server/*.csproj ./
RUN dotnet restore  //fails here

COPY ./Core/Server/ ./
RUN dotnet publish -c Release -o out  


FROM microsoft/dotnet:2.1-aspnetcore-runtime 
WORKDIR /app
COPY --from=build-env /app/out  .
ENTRYPOINT ["dotnet","Server.dll"]

Вывод сборки докера

$ docker build -t server .
Sending build context to Docker daemon  11.13MB
Step 1/11 : ARG serverPath=./Core/Server
Step 2/11 : FROM microsoft/dotnet:sdk AS build-env
 ---> 343e2dc38168
Step 3/11 : WORKDIR /app
 ---> Using cache
 ---> e9b75480ecb9
Step 4/11 : COPY ./Core/Server/*.csproj ./
 ---> Using cache
 ---> 2de864bedf6a
Step 5/11 : RUN dotnet restore 
 ---> Running in 2fc6963e7e2c
  Restoring packages for /app/Server.csproj...
/usr/share/dotnet/sdk/2.2.100/NuGet.targets(114,5): error : Unable to load the service index for source https://api.nuget.org/v3/index.json. [/app/Server.csproj]
/usr/share/dotnet/sdk/2.2.100/NuGet.targets(114,5): error :   The SSL connection could not be established, see inner exception. [/app/Server.csproj]
/usr/share/dotnet/sdk/2.2.100/NuGet.targets(114,5): error :   Authentication failed because the remote party has closed the transport stream. [/app/Server.csproj]
The command '/bin/sh -c dotnet restore -p:RestoreUseSkipNonexistentTargets=false -nowarn:msb3202,nu1503' returned a non-zero code: 1

4 ответа

Попробуй это

docker network ls

Здесь должны быть перечислены идентификаторы сети, попробуйте запустить сборку докеров.

docker build --network=<networkid> tag=<tag>

попробуйте выполнить вышеперечисленное со всеми перечисленными сетями, с одной из которых он будет работать, это хост-сеть.

Попробуйте обновить свой DNS-сервер, чтобы он был фиксированным (по умолчанию должно быть 8.8.8.8).

Я нашел это в Настройки-> Сеть -> DNS-сервер

Я видел эту же ошибку при попытке создать образ докера в WSL2 (Ubuntu 20.04), работающем на моем компьютере с Windows.

В моем случае я подтвердил, что могу получить nuget из своего WSL2 с помощью:

      curl -v https://api.nuget.org/v3/index.json

Но затем, если бы я попробовал тот же запрос из контейнера Docker, он не смог бы разрешить имя хоста (это просто зависло бы):

      docker run -it --rm curlimages/curl -v -k https://api.nuget.org/v3/index.json

Таким образом, это указывало на проблему с DNS, и, поскольку Docker использует вашу «хостовую» конфигурацию DNS, я сосредоточился на своем DNS WSL2. Я использовал DNS по умолчанию, который использует WSL2. Это означает, что оно генерируется автоматически... Я отключил его, следуя инструкциям здесь: https://superuser.com/questions/1533291/how-do-i-change-the-dns-settings-for-wsl2

DNS, который я затем вручную настроил в /etc/resolv.confбыл внутренним DNS-сервером моей компании. После перезапуска WSL2 и Docker мне удалось разрешить api.nuget.org в контейнерах Docker.

В Windows 7 или Windows Server 2008 R2 включите TLS 1.2 для связи с новым сервером NuGet. Microsoft DevBlogs о статусе NuGet TLS

Другие вопросы по тегам