“&&”上的VSTS泊坞窗任务失败docker RUN命令中的令牌

时间:2018-02-11 20:50:02

标签: powershell docker asp.net-core azure-devops

我在VSTS(Visual Studio online)中为我的ASP.NET核心应用程序配置CI。 我已经添加了“docker-compose build”任务来构建定义,但它失败并出现错误:


    Step 4/9 : RUN dotnet restore QuizService.sln && dotnet publish QuizService.sln -c Release -o obj/Docker/publish
    ---> Running in 7ea0cf1881d1
    ... rence = 'SilentlyContinue'; dotnet restore QuizService.sln && dotnet  ...
    The token '&&' is not a valid statement separator in this version.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : InvalidEndOfLine
    Service 'quizservice' failed to build: The command 'powershell -Command $ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue'; dotnet restore QuizService.sln && dotnet publish QuizService.sln -c Release -o obj/Docker/publish' returned a non-zero code: 1
    ##[error]Building quizservice
    ##[error]Service 'quizservice' failed to build: The command 'powershell -Command $ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue'; dotnet restore QuizService.sln && dotnet publish QuizService.sln -c Release -o obj/Docker/publish' returned a non-zero code: 1
    ##[error]C:\ProgramData\Chocolatey\bin\docker-compose.exe failed with return code: 1

问题在于我的dockerfile在线:

RUN dotnet restore QuizService.sln && dotnet publish QuizService.sln -c Release -o obj/Docker/publish

不知何故,码头工人不理解'&&'运营商: 令牌'&&'不是有效的语句分隔符。异常本身似乎与powershell有关,而不是与docker有关。 Poweshell没有'&&'语法,但为什么它开始使用powershell for RUN命令而不是cmd.exe?

当我在我的开发机器上本地构建时,它就像一个魅力。

有人遇到同样的问题吗?

3 个答案:

答案 0 :(得分:4)

问题在于构建代理类型不正确。 "托管VS2017"构建代理程序无法构建项目,因为它使用带有Windows容器的docker(以及PowerShell作为默认shell)。但是在我的开发机器上,我使用docker和linux容器(使用/ bin / sh作为默认shell)。选择正确的构建代理类型可以解决问题(因为/ bin / sh理解'&&')。

答案 1 :(得分:2)

您可以使用Shell命令更改shell:

int

或通过直接在Run命令中指定来更改它:

SHELL ["cmd", "/S"", "/C"]

答案 2 :(得分:0)

如果您安装了docker桌面,则默认情况下它以Windows Container开头。

从Docker Desktop菜单中,选择切换到Linux容器,以使&&符号起作用。