来自守护进程的错误响应:解析 Dockerfile 失败:语法错误 - 在“RUN”中找不到 =。必须采用以下形式:name=value

Posted

技术标签:

【中文标题】来自守护进程的错误响应:解析 Dockerfile 失败:语法错误 - 在“RUN”中找不到 =。必须采用以下形式:name=value【英文标题】:Error response from daemon: failed to parse Dockerfile: Syntax error - can't find = in "RUN". Must be of the form: name=value 【发布时间】:2021-09-21 21:10:13 【问题描述】:

当我尝试从 aws codebuild 构建 Dockerfile 时,我收到此错误 “” 在代码构建中,我使用 ubuntu 作为带有 aws/codebuild/standard 5.0 运行时版本的环境。 这是我的 Dockerfile 和 buildspec.yml:

FROM alipine:3.12
ARG SONARQUBE_VERSION=8.9.0.43852
COPY ./sonarqube-8.9.0.43852.zip   /opt/'sonarqube-$SONARQUBE_VERSION.zip'
RUN chmod 777 /opt/sonarqube-8.9.0.43852.zip
---------------
--------------

COPY --chown=sonarqube:sonarqube run.sh sonar.sh $SONARQUBE_HOME/bin/
USER sonarqube
RUN chmod 777 $SONARQUBE_HOME/bin/run.sh; \
RUN chmod 777 $SONARQUBE_HOME/bin/sonar.sh
VOLUME $SONARQUBE_HOME
WORKDIR $SONARQUBE_HOME
EXPOSE 9000
ENTRYPOINT ["/opt/sonarqube/bin/run.sh"]
CMD ["/opt/sonarqube/bin/sonar.sh"]

下面是我的 buildspec.yml

version: 0.2

phases:
  install:
    runtime-versions:
      java: corretto11

  pre_build:
    commands:
      - echo Logging in to Amazon ECR.....
      - aws --version
      - aws ecr get-login-password --region eu-west-1 | docker login --username AWS --password-stdin <MyAccountId>.dkr.ecr.eu-west-1.amazonaws.com/sonarqube
      
  build:
    commands:
      - aws s3 cp s3://ravitej/SonarQube/sonarqube-8.9.0.43852.zip  .
      - chmod +x sonarqube-8.9.0.43852.zip
      - echo $(pwd)
      - echo Build started on `date`
      - echo Building the Docker image...
      - echo $(docker version)
      - REPOSITORY_URI=<MyAccountID>.dkr.ecr.eu-west-1.amazonaws.com/sonarqube
      - IMAGE_TAG=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7)
      - docker build -t $REPOSITORY_URI:$IMAGE_TAG .
      
  post_build:
    commands:
      - echo Build completed on `date`
      - echo Pushing the Docker images...
      - docker push $REPOSITORY_URI:$IMAGE_TAG
      - echo Writing image definitions file...
      - printf '["name":"sonarqube","imageUri":"%s"]' $REPOSITORY_URI:$IMAGE_TAG > imagedefinitions.json
      - echo imagedefinitions.json
artifacts:
    files: imagedefinitions.json

过去 2 天我的头撞到桌子上。

请帮忙.. 这是代码构建的错误: enter image description here

【问题讨论】:

你能把这个减少到minimal reproducible example吗? @BMitch 简单来说,我收到错误“来自守护进程的错误响应:无法解析 Dockerfile:语法错误 - 在“RUN”中找不到 =。必须采用以下形式:名称=value”,同时从 codebuild 构建 dockerfile。请找到上面的屏幕截图。提前致谢。 至少我在想一个带有FROM 和单个1-2 行RUN 步骤的Dockerfile。最好基于像busybox 这样的小图像,以便任何想要重现您的问题的人更容易。 @BMitch 我已经缩短了 Dockerfile 以便于理解。请检查。这是我在 *** 上的第一篇文章。请和我一起裸露。如果你想让我进一步缩短它,请让我知道.. 谢谢。 @BMitch 问题已解决。ENV 声明和 RUN 命令之间存在语法不匹配。ENV 和 RUN 命令均未正确对齐/缩进 ..导致此错误。谢谢支持 【参考方案1】:

我刚刚遇到了一个类似的问题,导致我来到这里,问题是我的 Dockerfile 中的尾随 \。在你的情况下,我猜是这一行:

RUN chmod 777 $SONARQUBE_HOME/bin/run.sh; \

这会导致下一行出现问题。

【讨论】:

【参考方案2】:

当您尝试在行尾使用哈希添加注释时也会发生这种情况,例如喜欢# OK这里:

$ cat Dockerfile
[..]
ENV RSTUDIO_VER=1.3.1073 # OK
[..]

docker build 的解析器不会喜欢它!

$ docker build -t mirekphd/ml-cpu-r40-rs-cust .
Sending build context to Docker daemon  142.2MB

Error response from daemon: failed to parse Dockerfile: Syntax error - can't find = in "#". Must be of the form: name=value

【讨论】:

以上是关于来自守护进程的错误响应:解析 Dockerfile 失败:语法错误 - 在“RUN”中找不到 =。必须采用以下形式:name=value的主要内容,如果未能解决你的问题,请参考以下文章

来自守护进程的错误响应:无法停止容器 - 信号 init 进程导致“权限被拒绝”

来自守护进程的 Docker 错误响应:无法启动容器

Docker 抛出 FATA [0000] 来自守护进程的错误响应

Gitlab管道失败:错误:准备失败:来自守护进程的错误响应:toomanyrequests

来自守护进程的 Docker 错误响应:“冲突……容器已在使用”

docker:来自守护进程的错误响应:grpc:连接不可用