Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Dotnet Restore fails in docker build

Hello i am trying to dockerize a ASP NET Core 2.1 application and the docker build fails when it executes dotnet restore. I have already checked other threads for this specific problem
Nuget connection attempt failed "Unable to load the service index for source".

The solutions provided there did not help me.

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"]

Output of docker build

$ 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
like image 561
Bercovici Adrian Avatar asked Dec 10 '18 11:12

Bercovici Adrian


3 Answers

Try this

docker network ls

This should list the networkIDs try running the docker build

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

try the above with all the network listed it will work with one, that's the host network.

like image 162
stravish Avatar answered Sep 26 '22 17:09

stravish


Try updating your DNS Server to be Fixed (default should be 8.8.8.8).

I found this in Settings-> Network -> DNS Server

like image 42
ECH Avatar answered Sep 26 '22 17:09

ECH


I was seeing this same error while trying to build a docker image within WSL2 (Ubuntu 20.04) running on my Windows machine.

In my case, I confirmed that I could hit nuget from my WSL2 with:

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

But then if I tried that same request from a Docker container, it could not resolve the hostname (this would just hang):

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

So this pointed to an issue with DNS and since Docker uses your "host" DNS config, I focused on my WSL2 DNS. I was using the default DNS that WSL2 uses. This means /etc/resolv.conf is auto-generated... I turned that off following the instructions here: https://superuser.com/questions/1533291/how-do-i-change-the-dns-settings-for-wsl2

The DNS I then manually configured in /etc/resolv.conf was my company's internal DNS server. After restarting WSL2 and Docker, I was able to resolve api.nuget.org in Docker containers.

like image 1
BearsEars Avatar answered Sep 22 '22 17:09

BearsEars