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 有意义,但对于健康检查来说是未定义的行为。
在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 有意义,但对于健康检查来说是未定义的行为。