将 .NET Core 控制台应用程序构建到 Docker

Build .NET Core Console Application into Docker

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

Docker compose 文件有版本 2,这使得构建失败并出现以下错误消息

Microsoft.DotNet.Docker.CommandLineClientException: client version 1.22 is too old. Minimum supported API version is 1.24, please upgrade your client to a newer version.

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

MSB4006 There is a circular dependency in the target dependency graph involving target "DockerCleanServiceReferences".

我不知道如何解决。我知道错误消息是由于某些配置导致循环引用(例如 post 确实构建的构建事件)

那么,有什么资源或技巧可以手动将 .NET Core 控制台应用程序打包到 docker 容器中吗?我才刚刚开始了解 Docker,所以不要以为我对它一无所知。

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

能否请您检查 Windows 的 Docker 是否定位 Linux?您的目标很可能是 Windows 容器,.NET Core 尚不支持它。

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

关于您关于如何手动将 .NET Core 控制台应用程序打包到 Docker 图像的问题。 https://github.com/dotnet/dotnet-docker-samples are intended to answer that very question. Check them out. If you run into issues with them or have suggestions please log an issue (https://github.com/dotnet/dotnet-docker-samples/issues).

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

在我第一次使用 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 中进行了此更改: 文件顶部的 'version' 参数设置为 2,已更改为 2.1 对项目中的其他文件重复相同的更改,包括:

docker-compose.yml

docker-compose.override.yml

docker-compose.vs.debug.yml

docker-compose.vs.release.yml