Dockerfile构建-可以忽略错误吗?


111

我有一个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忽略这一点?

Answers:


220

当然。Docker只是在响应RUNshell脚本返回的错误代码Dockerfile。如果您Dockerfile有以下内容:

RUN make

您可以将其替换为:

RUN make; exit 0

这将始终返回0(成功)退出代码。这里的缺点是,你的形象将出现,成功地构筑即使在构建过程中实际发生的错误。


2
我试图跑步时来到这里service php7-fpm start。它将返回1,并且RUN将失败;using service php7-fpm start; service php7-fpm status可以解决问题-似乎在构建过程中也解决了问题,因为两个命令分开运行会带来麻烦。
igorsantos15年

尝试从源代码构建Qt5时,我来过这里。它可以很好地构建,但是结合使用并发构建和Qt构建过程具有从make运行的构建时测试(故意失败)的事实,我的RUN命令退出并出现错误(2)。这有望解决问题!
Lennart Rolland

33

这可能对那些其图像中的潜在错误不足以 引起注意/记录的人很感兴趣。(此外,没有足够的代表对此发表评论,所以在这里作为答案。)

如前所述,缺点RUN make; exit 0是您不了解构建是否失败。因此,宁愿使用类似以下内容的方法:

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

像这样,您会通过docker映像构建过程日志得到通知,并且您可以看到在运行过程中到底发生了什么make(或任何其他执行,这不限于make)。


这是被低估的答案。我的用例是某些软件包列表无法访问且apt-get update -y失败。
Silviu Burcea

14

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

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

正是我所需要的:)如果工作失败,失败会更好,但是在下一阶段(清理)之后
csomakk
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.