How to add private nuget source in dotnet dockerfile?
By adding a nuget.config to the solution/project and copying it into the Docker project:
WORKDIR /srcCOPY ["nuget.config", ""]
You can add the source and then have success with your docker build.
<?xml version="1.0" encoding="utf-8"?><configuration> <packageSources> <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" /> <add key="Nellson Nuget Repo" value="http://private.source.local:123/v3/index.json" /> </packageSources> <activePackageSource> <add key="NuGet official package source" value="https://api.nuget.org/v3/index.json" /> <add key="Nellson Nuget Repo" value="http://private.source.local:123/v3/index.json" /> </activePackageSource></configuration>
My current workaround is to create a copy of the nuget.config
with a packageSourceCredentials
section that contains placeholders for user name and password. I then replace my existing nuget.config
with this file and replace the user name and password with environment variables.
The only drawback is that I need to keep both config files in sync. If I modify my nuget.config
in the project I need to remember to update the copy as well.
nuget.config.template
<?xml version="1.0" encoding="utf-8"?><configuration> <packageSources> <add key="GitHub private registry" value="https://nuget.pkg.github.com/your_orga/index.json" /> </packageSources> <packageSourceCredentials> <GitHub_x0020_private_x0020_registry> <add key="Username" value="USER" /> <add key="ClearTextPassword" value="PW" /> </GitHub_x0020_nuget_x0020_registry></packageSourceCredentials></configuration>
Dockerfile
FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build-imageARG NUGET_AUTH_TOKENARG NUGET_USER_NAMEWORKDIR /appCOPY ./My.Project .# Replace nuget.configRUN rm nuget.configCOPY ./gitlab-ci/nuget.config.template ./nuget.configRUN sed -i -e "s/USER/$NUGET_USER_NAME/g" -e "s/PW/$NUGET_AUTH_TOKEN/g" nuget.configRUN dotnet restore
.gitlab-ci.yml
docker build --build-arg NUGET_USER_NAME=$NUGET_USER_NAME --build-arg NUGET_AUTH_TOKEN=$NUGET_AUTH_TOKEN --tag $CI_REGISTRY/organization/application:$CI_COMMIT_SHA --file gitlab-ci/Dockerfile .
The nuget source
command is part of the nuget.exe command line interface, which can only be used on Linux in combination with Mono. Because the mcr.microsoft.com/dotnet/core/sdk image is a Linux container (Debian, to be precise) - you will need to install Mono and Nuget yourself in order to use that command. Your other option is to get the official Mono docker image and install .NET Core and NuGet.exe into that.