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

3
我使用Visual Studio 2017(RTM)创建了一个新的.NET Core控制台应用程序,然后添加了Docker支持,并成功获取了docker文件和compose文件。但是它们存在一些问题。
Docker compose文件的版本为2,导致构建失败,出现以下错误信息:
Microsoft.DotNet.Docker.CommandLineClientException: 客户端版本1.22太旧。最小支持API版本为1.24,请将客户端升级到更新版本。
可以通过手动更改compose文件版本为2.1来解决此问题(不确定是否有效)。然后你会得到另一个错误消息:
MSB4006 目标依赖图中涉及目标“DockerCleanServiceReferences”的循环依赖关系。
我不知道如何解决这个问题。我知道错误消息是由某些配置引起的循环引用(例如执行构建的后生成事件)。
那么,有没有任何资源或提示可以手动将.NET Core控制台应用程序打包到Docker容器中?我刚开始接触Docker,所以不要认为我已经了解它的任何内容。
另外一个问题是,是否有地方可以获得这些Visual Studio模板的更新版本,还是这些都是已知的问题?
5个回答

2

请检查一下您的Docker for Windows是否针对Linux进行了设置?您可能正在使用针对Windows容器的设置,但目前不支持.NET Core。


1
我之前在Windows上使用Docker,但现在改为Linux后,构建错误并没有改变。仍然出现循环依赖的错误。此外,compose-vs.release/debug.yml文件中有标签...targetoperationsystem=linux。 - Antti Simonen

2
事实证明,对我来说问题出在DockerFile、SLN文件和CSPROJ文件都在同一个文件夹中。你知道当你创建一个解决方案时,它会问你是否要创建一个子目录吗?如果你不这样做,并且你的SLN和CSPROJ文件共享同一个文件夹,那么Docker文件将不可避免地被添加到相同的文件夹中,从而创建循环引用。如果你的SLN文件位于CSPROJ文件的上一级目录中,DockerFile等文件将被放置在父目录中与SLN文件一起,一切都会好起来。这对我解决了问题。

我同意创建一个子目录,我的.sln文件在.csproj的上一级文件夹中,但Dockerfile会被创建在与csproj相同的文件夹中。 - Kirsten

1
在我第一次使用默认模板和docker时,我遇到了同样的问题。我参考了这篇文章-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的'version'参数更改为2.1 在项目中的其他文件上重复相同的更改:

docker-compose.yml

docker-compose.override.yml

docker-compose.vs.debug.yml

docker-compose.vs.release.yml


0

-2

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


1
请看我对David回答的评论。已经切换到Linux,但还是无法工作?我需要做些其他的事情吗? - Antti Simonen
我默认使用的是Linux容器,但出现了这个错误,尝试切换到Windows容器,但仍然无法解决这个错误。 - codeMonkey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接