web-dev-qa-db-fra.com

Dockerfile ne peut pas voir le fichier local ou le serveur de nuget privé

J'essaie de démarrer mon API web .net core sur la technologie des conteneurs. en utilisant docker.

Environnements = Windows 10, Visual Studio

Version Docker:

Client:

Version: 17.12.0-ce

Version API: 1.35

Version Go: go1.9.2

Git commit: c97c6d6

Construit: mer.27 déc.20: 05: 22 2017

OS/Arch: windows/AMD64

Serveur:

Moteur:

Version: 17.12.0-ce

Version API: 1.35 (version minimale 1.12)

Version Go: go1.9.2

Git commit: c97c6d6

Construit: mer.27 déc.20: 12: 29 2017

OS/Arch: linux/AMD64

Expérimental: vrai

Mon fichier Nuget.Config:

<?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="Private" 
value="http://My_Private_Nuget_Server" />


</packageSources>
<packageRestore>
<add key="enabled" value="True" />
<add key="automatic" value="True" />
</packageRestore>
<bindingRedirects>
<add key="skip" value="False" />
</bindingRedirects>
<packageManagement>
<add key="format" value="0" />
<add key="disabled" value="True" />
</packageManagement>


<apikeys>
<add key="https://www.nuget.org" value="Some_Long_Value" />
</apikeys>


<disabledPackageSources />
</configuration>

Mon Dockerfile:

FROM Microsoft/aspnetcore-build:2.0 AS build-env
WORKDIR /app

# Copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore

# Copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o out

# Build runtime image
FROM Microsoft/aspnetcore:2.0
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "MailAlertWebApiWithEF.dll"]

J'utilise Linux Container sur une machine Windows 10. J'ai un projet de base .net sur Visual Studio 17. Lorsque je ajoute le support de docker et que je fonctionne à partir de VS 17, tout fonctionne bien. L'API se tient à l'intérieur d'un conteneur, mais ne fonctionne pas lorsque je ferme le VS. Cependant, lorsque j'essaie de personnaliser mon dockerfile pour rendre mon image et mon conteneur indépendants de VS. Il donne une erreur à cause d'un .dll Privé.

Dans mon projet, j'ai un .dll de mon serveur nuget privé. Lorsque je l'ai essayé sans mon .dll Privé, je peux créer l'image. Mais j'ai besoin de cela .dll. Docker me donne cette erreur:

MailAlertWebApiWithEF.csproj: erreur NU1101: impossible de trouver le package WebApi.Utils. Aucun package n'existe avec cet identifiant dans les sources: nuget.org

J'ai recherché cette erreur. La source du problème ressemble au fichier Nuget.Config. Mais cela me semble bon parce que je peux me voir là-bas. Lorsque je recherche les solutions, les flèches sont toujours sur les machines Linux mais utilisent les fenêtres.

1-) Donc, si je peux démarrer mon projet avec VS 17, mon fichier nuget.config est dans la bonne forme. Il peut voir mon serveur nuget privé. Droite? Alors pourquoi docker ne le voit pas?

Veuillez aider

9
rmznbyk 1

Pour qu'une commande dotnet s'exécute à l'intérieur d'un conteneur afin de trouver vos flux personnalisés, le nuget.config le fichier doit également être copié dans le conteneur.

Pour ce faire, ajoutez un nuget.config fichier avec votre flux privé dans votre dossier de projet et ajoutez une étape COPY supplémentaire qui copie ce fichier dans le conteneur.

Exemple (Dockerfile):

WORKDIR ...
COPY NuGet.Config /
COPY ... ...
11
Martin Ullrich

pour ceux qui ont atterri ici alors qu'ils utilisaient référentiels privés ou flux de nuget personnalisés et RUN dotnet restore est à défaut, alors voici ce que vous pouvez faire:

Applicable uniquement si: votre NuGet.Config contient le point de terminaison du repo privé et les informations d'identification, puis

1) copiez NuGet.Config de votre système dans le dossier du projet au même niveau racine que le fichier .csproject.

2) maintenant dans le fichier docker, mettez ces instructions juste avant d'essayer de restaurer le package:

COPY ./NuGet.Config ./

3) après cela, ajoutez l'emplacement du fichier de configuration dans la commande dotnet restore comme ceci:

RUN dotnet restore <CS_project_name>.csproj --configfile ./NuGet.Config

4) Maintenant, faites le reste de la chose que vous vouliez faire.

5) juste à la fin avant le point d'entrée ou avant de copier dans un autre conteneur (en cas de construction en plusieurs étapes), c'est une bonne idée de supprimer NuGet.Config, car nous ne voulons pas que cela soit disponible dans le pod/récipient à voir

RUN rm ./NuGet.Config
9
Paras Patidar