Docker HEALTHCHECK执行exit 0仍无法返回成功的问题排查
Docker HEALTHCHECK 失败问题排查与解决
核心问题:HEALTHCHECK 语法错误
你当前的HEALTHCHECK命令写法存在错误:
HEALTHCHECK --interval=30s --timeout=10s --start-period=1m --retries=3 CMD [ "CMD-SHELL", "/healthcheck.sh" ]
CMD-SHELL 是 Docker HEALTHCHECK 的语法关键字,不能作为 CMD 指令的参数放在exec格式的数组中。这种写法会让Docker尝试执行名为CMD-SHELL的命令,而该命令实际不存在,因此健康检查必然失败。
两种正确的写法
1. Exec 格式(推荐)
直接指定脚本路径,前提是脚本已拥有执行权限:
HEALTHCHECK --interval=30s --timeout=10s --start-period=1m --retries=3 CMD [ "/healthcheck.sh" ]
2. Shell 格式
使用CMD-SHELL关键字,或直接调用shell执行脚本:
# 写法一:使用 CMD-SHELL 关键字 HEALTHCHECK --interval=30s --timeout=10s --start-period=1m --retries=3 CMD-SHELL "/healthcheck.sh" # 写法二:直接通过shell执行脚本 HEALTHCHECK --interval=30s --timeout=10s --start-period=1m --retries=3 CMD /bin/sh /healthcheck.sh
额外验证点
- 确保Dockerfile中已为脚本添加执行权限,比如构建阶段执行:
COPY healthcheck.sh / RUN chmod +x /healthcheck.sh - 可通过
docker logs <容器ID>查看健康检查的输出日志,确认具体错误信息(如命令找不到、脚本权限不足等)。
内容的提问来源于stack exchange,提问作者Chris Rice
相关产品推荐
相关产品推荐

