来自守护进程的错误响应:解析 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 抛出 FATA [0000] 来自守护进程的错误响应
Gitlab管道失败:错误:准备失败:来自守护进程的错误响应:toomanyrequests