将.NET核心控制台应用程序构建到Docker中

将.NET核心控制台应用程序构建到Docker中,docker,.net-core,visual-studio-2017,Docker,.net Core,Visual Studio 2017,我使用Visual Studio 2017(RTM)创建了一个新的.NET核心控制台应用程序。然后添加了Docker支持,并获得了Docker文件+撰写文件。然而,它们几乎没有什么问题 Docker compose文件的版本为2,导致生成失败,并显示以下错误消息 Microsoft.DotNet.Docker.CommandLineClientException:客户端版本1.22太旧。支持的最低API版本为1.24,请将客户端升级到较新版本 可以通过手动将compose文件版本更改为2.1来修

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

Docker compose文件的版本为2,导致生成失败,并显示以下错误消息

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

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

MSB4006目标依赖关系图中存在涉及目标“DockerCleanServiceReferences”的循环依赖关系

这个我不知道怎么解决。我知道错误消息是由于某些导致循环引用的配置造成的(例如,不生成的生成后事件)

那么,有没有关于如何手动将.NET核心控制台应用程序打包到docker容器中的参考资料或提示?我刚开始了解Docker,所以别以为我知道这件事


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

请检查您的Docker for Windows是否针对Linux?很可能您的目标是Windows容器,.NET Core还不支持它。

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

关于如何手动将.NET核心控制台应用程序打包到Docker映像的问题。本报告旨在回答这个问题。看看他们。如果您遇到问题或有建议,请记录问题()。

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

在我与docker的VS2017第一次旋转中,使用默认模板,我遇到了相同的问题。 我在提及本条时— 这对我来说很有用-根据建议,在docker compose项目的docker-compose.ci.build.yml中进行了以下更改: 文件顶部设置为2的“版本”参数更改为2.1 对项目中的其他文件重复相同的更改,包括:

docker-compose.yml

docker-compose.override.yml

docker-compose.vs.debug.yml


docker compose.vs.release.yml

我有针对Windows的docker for Windows,但我将其更改为Linux,并且没有更改实际的构建错误。循环依赖项仍然存在错误。另外,compose-vs.release/debug.yml文件具有标签…targetoperationsystem=linux请参阅我对David答案的评论。切换到Linux但仍然不工作?还有什么我需要做的吗?默认情况下我有Linux容器,出现此错误,尝试切换到Windows容器,没有更改--仍然出现错误。我同意创建子目录,并且我的.sln位于.csproj上方的文件夹中,但Dockerfile与csproj在同一文件夹中创建