将.NET Core Console应用程序构建到Docker中

时间:2017-03-10 08:49:29

标签: docker .net-core visual-studio-2017

我使用Visual Studio 2017(RTM)创建了一个新的.NET Core Console应用程序。然后添加了Docker支持并获得了docker文件+ compose文件就好了。然而,它们几乎没有问题。

Docker撰写文件的版本为2,这使得构建失败时出现以下错误消息

  

Microsoft.DotNet.Docker.CommandLineClientException:客户端版本1.22太旧了。支持的最低API版本为1.24,请将您的客户端升级到更新版本。

可以通过手动将撰写文件版本更改为2.1来解决此问题。 (不确定是否有效修复)然后您将收到另一条错误消息

  

MSB4006目标依赖图中存在循环依赖关系,涉及目标" DockerCleanServiceReferences"。

我不知道如何修复。我知道错误消息是由于某些配置导致循环引用(例如,构建的构建后事件)

那么,如何将.NET Core控制台应用程序手动打包到docker容器中的任何资源或技巧?我刚认识了Docker,所以不要以为我对此一无所知。

另一个问题是,在某些地方我可以获得这些Visual Studio模板的更新版本,还是这些已知问题?

5 个答案:

答案 0 :(得分:2)

请问您的Docker for Windows是否针对Linux?您可能正在瞄准Windows容器,但.NET Core尚不支持。

答案 1 :(得分:2)

事实证明,问题在于我的DockerFile,SLN文件和CSPROJ文件都在同一个文件夹中。您知道在创建解决方案时,它会询问您是否要创建子目录吗?如果您,并且您的SLN和CSPROJ文件共享同一文件夹,则Docker文件将不可避免地添加到同一文件夹中,从而创建循环引用。如果您的SLN文件位于CSPROJ文件上方的目录中,则DockerFile等将使用SLN文件放入您的父目录,并且一切都会正常。这解决了我。

答案 2 :(得分:1)

在我第一次使用docker旋转VS2017时,使用默认模板,我遇到了同样的问题。 我提到了这篇文章 - https://blogs.msdn.microsoft.com/containerstuff/2017/03/13/visual-studio-2017-client-version-1-22-is-too-old/ 这对我有用 - 按照建议,在docker-compose项目的docker-compose.ci.build.yml中进行了这些更改: '版本'文件顶部的参数设置为 2 ,更改为2.1 对项目中的其他文件重复相同的更改,包括:

搬运工-compose.yml

搬运工-compose.override.yml

搬运工-compose.vs.debug.yml

搬运工-compose.vs.release.yml

答案 3 :(得分:0)

关于如何手动将.NET Core控制台应用程序打包到Docker镜像中的问题。 https://github.com/dotnet/dotnet-docker-samples旨在回答这个问题。去看一下。如果您遇到问题或提出建议,请记录问题(https://github.com/dotnet/dotnet-docker-samples/issues)。

答案 4 :(得分:-2)

感谢您的帖子。我们将很快添加Nano Server容器工具""。在此之前,您可以使用Linux容器,这将提供类似的体验。