【问题标题】:VSTS docker task failed on '&&' token in docker RUN commandVSTS docker 任务在 docker RUN 命令中的“&&”令牌上失败
【发布时间】:2018-02-11 20:50:01
【问题描述】:

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

第 4/9 步:运行 dotnet restore QuizService.sln && dotnet publish QuizService.sln -c Release -o obj/Docker/publish ---> 运行在 7ea0cf1881d1 ... rence = 'SilentlyContinue'; dotnet restore QuizService.sln && dotnet ... 标记“&&”在此版本中不是有效的语句分隔符。 + CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException + FullyQualifiedErrorId : InvalidEndOfLine 服务 'quizservice' 未能构建:命令 'powershell -Command $ErrorActionPreference = 'Stop'; $ProgressPreference = '静默继续'; dotnet restore QuizService.sln && dotnet publish QuizService.sln -c Release -o obj/Docker/publish' 返回非零代码:1 ##[错误]构建测验服务 ##[error]Service 'quizservice' 构建失败:命令'powershell -Command $ErrorActionPreference = 'Stop'; $ProgressPreference = '静默继续'; dotnet restore QuizService.sln && dotnet publish QuizService.sln -c Release -o obj/Docker/publish' 返回非零代码:1 ##[错误]C:\ProgramData\Chocolatey\bin\docker-compose.exe 失败,返回码:1

问题在于我的 dockerfile 在线:

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

不知何故 docker 不理解 '&&' 运算符: 标记“&&”不是有效的语句分隔符。异常本身似乎与 powershell 而不是 docker 有关。 Poweshell 没有 '&&' 语法,但为什么它在这里开始使用 powershell 运行命令而不是 cmd.exe?

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

有人遇到同样的问题吗?

【问题讨论】:

  • 您可以在 OneDrive 上共享详细日志。
  • 你解决了这个问题吗?
  • 这是一个愚蠢的错误:VSTS 中有几种类型的构建代理。我错误地选择了“Hosted VS2017”,它使用 docker 和 windows 容器(以及 powershell 作为默认 shell)。但是在我的开发机器上,我使用 docker 和 linux 容器(使用 /bin/sh 作为默认 shell)来构建和测试我的项目。所以选择正确的构建代理类型解决了这个问题(因为 /bin/sh 理解 '&&')。您关于更改外壳的答案也是正确的,但在我的情况下,我不应该更改外壳,我只需要选择正确的构建代理,

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


【解决方案1】:

问题在于不正确的构建代理类型。 “Hosted VS2017”构建代理无法构建项目,因为它使用 docker 和 windows 容器(以及 powershell 作为默认 shell)。但是在我的开发机器上,我使用 docker 和 linux 容器(使用 /bin/sh 作为默认 shell)。选择正确的构建代理类型解决了问题(因为 /bin/sh 理解 '&&')。

【讨论】:

  • 谢谢。我爱上了这个。我选择了Hosted VS2017 池但失败了。使用Hosted Linux Preview 再次构建成功。
  • 我在 windows 上使用 docker 并在 RUN 中使用 && 给出:令牌 '&&' 在此版本中不是有效的语句分隔符。有没有正确的链接RUN方式?
【解决方案2】:

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

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

或者直接在Run命令中指定修改:

RUN /bin/bash -c 'source $HOME/.bashrc; echo $HOME'

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2019-05-28
      • 2018-04-22
      • 2017-07-22
      • 1970-01-01
      • 2019-04-28
      • 1970-01-01
      • 2018-02-23
      • 2020-05-03
      • 2020-02-02
      相关资源
      最近更新 更多