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
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 ... ...
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