Réponse tardive, mais question assez courante, donc je vais y répondre.
Cela se produit généralement si l'argument de ciblage de la dll dans votre point d'entrée n'existe pas. Il existe d'autres possibilités si vous exportez, goudronnez et réimportez des ressources, mais ce n'est probablement pas ce dont il s'agit ici.
Dans votre cas, l'opération de copie pointe vers un emplacement de fichier relatif Root. Je suppose que vous ne publiez pas dans {system Root/}bin/Release/Publish, et que votre dockerfile est situé dans le Root de votre projet.
Pour résoudre ce problème, vous devez effectuer les opérations de copie par rapport au répertoire dans lequel se trouve votre fichier docker, et spécifier les opérations de copie en utilisant un chemin relatif au répertoire (./etc).
Exemple qui fonctionne d'après mes essais :
FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
WORKDIR /app
COPY ./bin/Release/Publish /app
ENTRYPOINT ["dotnet", "WebApi.dll"]
Pour voir si cela fonctionne, examinez le conteneur résultant en le lançant avec une commande cmd :
docker run -it --rm sam:latest /bin/sh
...
pwd #ensure workdir is app
ls -la #ensure that your application is copied here
Si vous souhaitez approfondir vos recherches, vous pouvez utiliser docker run pour remplacer votre point d'entrée et expérimenter différentes configurations de lancement pour voir le résultat. Les commandes dont vous aurez besoin sont les suivantes :
docker run -it --rm --entrypoint {dotnet executable} {image}:{tag} {non-existent dll}
Exemple de résultat lorsque l'on cible une dll inexistante via une surcharge sur un conteneur qui fonctionne par ailleurs :
docker run -it --rm --entrypoint dotnet sam:latest weebles.dll
Did you mean to run dotnet SDK commands? Please install dotnet SDK from:
https://go.microsoft.com/fwlink/?LinkID=798306&clcid=0x409