Docker 健康检查命令。我们真的需要||出口 1?

Docker health check command. Do we really need || exit 1?

What happens to a Docker Container when HEALTHCHECK fails已经有类似的问题了,但是关于|| exit 1的次要点不是问题的主要焦点(也没有直接回答)。

Dockerfile reference 包含以下示例:

HEALTHCHECK
 --interval=5m --timeout=3s \
  CMD curl -f http://localhost/ || exit 1

我在 Internet 上看到过其他几个以 || exit 1 结尾的健康检查指令示例。即使原始命令只有两个可能的退出代码是 0 和 1。

|| exit 1有什么意义?

不会 curl -f 自行退出并返回错误代码 22 吗? Docker 是否无法识别 1 以外的错误代码?

Even when the only two possible exit codes of the original command are 0 and 1.

这是一个很大的假设,那些使用 || exit 1 编写命令的人并没有做出这样的假设。如果命令以 2 或除 0 或 1 之外的任何其他代码退出,则这是未定义的行为。据推测,docker 正在为他们将来可能提出的任何其他行为保留其他退出代码。

特别是对于 curl,它可以 exit with a lot of other values 这对 curl 有意义,但对于健康检查来说是未定义的行为。