2017-03-10 145 views
3

我使用Visual Studio 2017(RTM)創建了一個新的.NET Core控制檯應用程序。然後添加Docker支持並獲得docker文件+撰寫文件就好了。但是他們幾乎沒有問題。將.NET Core控制檯應用程序構建到Docker中

碼頭工人組成文件的版本2,這使得構建失敗以下錯誤消息

Microsoft.DotNet.Docker.CommandLineClientException:客戶端版本1.22太舊。支持的最低API版本是1.24,請將您的客戶升級到新版本。

這可以通過手動將撰寫文件版本更改爲2.1來解決。 (不知道是否有效的修復)然後你會得到另一個錯誤信息

MSB4006目標依賴關係圖中涉及目標「DockerCleanServiceReferences」的循環依賴項。

這我不知道如何解決。我知道錯誤信息是由於某些導致循環引用的配置(例如,構建後的構建事件)

因此,任何資源或技巧如何將.NET Core控制檯應用程序手動打包到docker容器中?我只是想知道Docker,所以不要假設我知道它的任何內容。

另一個問題,那裏有一些地方,我可以得到這些Visual Studio模板的更新版本或這些已知的問題?

回答

2

事實證明,我的問題是我的DockerFile,SLN文件和CSPROJ文件都在同一個文件夾中。您知道如何在創建解決方案時詢問您是否要創建子目錄?如果您的不是,並且您的SLN和CSPROJ文件共享相同的文件夾,那麼Doc​​ker文件將不可避免地被添加到該文件夾​​中,從而創建循環引用。如果你的SLN文件存在於你的CSPROJ文件的目錄中,那麼Doc​​kerFile等將被放到你的父目錄和SLN文件中,並且一切都會好的。這爲我解決了它。

+2

謝謝!這解決了這個問題。 –

+0

我說是創建一個子目錄,我的.sln位於.csproj上面的文件夾中,但Dockerfile是在與csproj相同的文件夾中創建的 –

2

您可以檢查您的Docker for Windows是否針對Linux?很可能您的目標是Windows容器,而.NET Core尚未支持。

+1

我有針對Windows的Docker for Windows,但我將其更改爲Linux,並且沒有更改實際的編譯錯誤。仍然出現循環依賴的錯誤。另外compose-versusrelease/debug.yml文件有標籤... targetoperationsystem = linux –

-2

感謝您的帖子。我們將很快添加Nano Server容器工具。在那之前,你可以使用Linux容器來提供類似的體驗。

+1

請參閱我對David的回答的評論。切換到Linux,仍然無法正常工作?還有什麼我需要做的嗎? –

+0

我有默認的Linux容器,出現這個錯誤,嘗試切換到Windows容器,沒有改變 - 仍然有錯誤。 – codeMonkey

0

在我的第一個使用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。1 重複項目上的其他文件一樣的變化,包括:

泊塢窗,compose.yml

泊塢窗,compose.override.yml

泊塢窗,compose.vs.debug.yml

docker-compose.vs.release.yml

相關問題