【问题标题】:Dockerfile build - possible to ignore error?Dockerfile 构建 - 可能忽略错误?
【发布时间】:2015-08-23 09:06:27
【问题描述】:

我有一个 Dockerfile。构建映像时,构建失败并出现此错误:

automake: error: no 'Makefile.am' found for any configure output
Error build: The command [/bin/sh -c aclocal && autoconf && automake -a] returned a non-zero code: 1

实际上是无害的。该库构建良好,但 Docker 在收到此错误后停止构建。有什么方法可以指示 Docker 忽略这一点?

【问题讨论】:

    标签: docker dockerfile


    【解决方案1】:

    您也可以使用标准的 bash 忽略错误|| true,如果您处于链的中间,这很好:

    RUN <first stage> && <job that might fail> || true && <next stage>
    

    【讨论】:

    • 正是我所需要的 :) 如果工作失败,那么更好的是失败,但在下一阶段(清理)之后
    【解决方案2】:

    这对于那些图像中的潜在错误不够无害 不会被注意到/记录的人可能会感兴趣。 (另外,没有足够的代表发表评论,所以在这里作为答案。)

    正如所指出的,RUN make; exit 0 的缺点是您无法知道构建是否失败。因此,宁愿使用类似的东西:

    make test 2>&1 > /where/ever/make.log || echo "There were failing tests!"
    

    像这样,您会通过 docker 映像构建过程日志收到通知,并且您可以查看在 make 期间究竟发生了什么问题(或其他任何执行,这不限于制作)。

    【讨论】:

    • 这是被低估的答案。我的用例是一些包列表无法访问,apt-get update -y 失败了。
    【解决方案3】:

    当然。 Docker 只是响应Dockerfile 中的RUN shell 脚本返回的错误代码。如果你的Dockerfile 有类似的东西:

    RUN make
    

    您可以将其替换为:

    RUN make; exit 0
    

    这将始终返回0(成功)退出代码。这里的缺点是,即使在构建过程中存在实际错误,您的图像也会看起来构建成功。

    【讨论】:

    • 我在尝试运行service php7-fpm start 时来到这里。它会返回 1 并且 RUN 会失败;使用service php7-fpm start; service php7-fpm status 可以解决问题 - 它似乎也解决了构建期间的问题,因为单独运行的两个命令会带来麻烦。
    • 我在尝试从源代码构建 Qt5 时来到这里。它会构建得很好,但是使用并发构建并结合 Qt 构建过程具有从 make 运行的构建时测试(故意失败)的事实,我的 RUN 命令退出并出现错误(2)。希望这能解决问题!
    • 啊 Laravel 作曲家安装现在强迫人们运行......随便......
    • 如果我们想使用COPY而不是RUN怎么办?!例如,忽略 src/dest 文件是否存在。
    • 将文件/目录的父目录复制到容器中,然后在RUN 语句中使用脚本来检查特定文件并将它们放置在适当的位置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-22
    • 2021-03-26
    • 2023-01-30
    • 2018-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多