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

Osk*_*kar 89 docker dockerfile

我有一个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
Run Code Online (Sandbox Code Playgroud)

实际上是无害的.该库构建正常,但Docker一旦收到此错误就停止构建.有什么方法可以指示Docker忽略它吗?

lar*_*sks 187

当然.Docker只是响应了RUNshell脚本返回的错误代码Dockerfile.如果你Dockerfile有类似的东西:

RUN make
Run Code Online (Sandbox Code Playgroud)

您可以将其替换为:

RUN make; exit 0
Run Code Online (Sandbox Code Playgroud)

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

  • 我试图运行`service php7-fpm start`时来过这里。它将返回1,并且RUN将失败;使用`service php7-fpm start; service php7-fpm status可以解决问题-似乎在构建过程中也解决了问题,因为两个单独运行的命令都会带来麻烦。 (2认同)

小智 18

这可能是那些在图像中潜在错误不足以 被忽视/记录的人所感兴趣的.(另外,还没有足够的代表发表评论,所以这里作为答案.)

正如所指出的那样,缺点RUN make; exit 0是你不知道,如果你的构建失败了.因此,请使用以下内容:

make test 2>&1 > /where/ever/make.log || echo "There were failing tests!"
Run Code Online (Sandbox Code Playgroud)

像这样,您可以通过docker映像构建过程日志获得通知,并且您可以看到在make执行期间究竟出现了什么(或者执行其他任何操作,这不限于make).

  • 这是被低估的答案。我的用例是一些软件包列表无法访问并且“apt-get update -y”失败。 (2认同)

Mor*_*enB 6

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

RUN <first stage> && <job that might fail> || true && <next stage>
Run Code Online (Sandbox Code Playgroud)

  • 正是我所需要的:)更好的是如果工作失败,但在下一阶段(清理)之后失败 (3认同)