Azure Container Apps容器调试求助:启动探针失败且日志缺失
Azure Container Apps 容器调试问题排查方案
问题梳理
从日志和配置来看,核心问题集中在这几点:
- 启动探针持续返回状态码1失败,导致容器反复重启后被终止
- 缩放规则设为0-1,容器因无流量缩容,但终止原因显示
ManuallyStopped——这是ACA的默认标注,缩容触发的终止都会被归为此类,不用纠结这个表述 - 日志流无输出,缺少常用的
ContainerAppSystemLogs_CL表,没法直接获取容器内部日志 - 无法进入容器内部调试流程和代码
调试步骤
1. 强制保持容器运行,避免缩容干扰
当前HTTP缩放规则会在无流量时把副本数降到0,直接终止容器,先临时改配置强制保持1个副本:
"scale": { "minReplicas": 1, "maxReplicas": 1, "rules": [] }
部署后容器不会被缩容终止,能稳定运行方便排查启动探针问题。
2. 彻底清理启动探针配置
日志里仍显示启动探针失败,但你说已经移除了探针,大概率是旧配置没生效或者残留了默认探针。用Azure CLI查当前修订版本的探针配置:
az containerapp revision show --name <containerapp-name> --resource-group <resource-group> --revision <revision-name>
如果确实还有启动探针,彻底移除后重新部署。
3. 把容器日志转成标准输出
你的配置里日志都写到文件里了,ACA日志流只会抓取stdout/stderr的内容,所以要修改启动命令或者Gunicorn配置,把日志转出来:
- 方式一:在容器配置里加日志重定向命令
"containers": [ { // 其他配置不变 "command": ["/bin/sh"], "args": ["-c", "while true; do sleep 10000; done && tail -f /path/to/gunicorn_api_None_app.log /path/to/gunicorn_api_None_error.log"] } ] - 方式二:修改Gunicorn环境变量,让日志直接输出到标准流
"env": [ // 其他变量不变 { "name": "GUNICORN_ACCESSLOG", "value": "-" }, { "name": "GUNICORN_ERRORLOG", "value": "-" } ]
4. 直接进入容器终端调试
ACA支持exec命令进入容器,前提是容器处于运行状态(所以先按步骤1强制保活),执行以下命令:
az containerapp exec --name <containerapp-name> --resource-group <resource-group> --container <container-name> --command "/bin/sh"
如果进不去,检查:
- 容器是否真在运行(看修订版本状态)
- 镜像里有没有
/bin/sh或bash这类shell工具
5. 检查证书卷挂载是否正常
你的配置里挂载了cert-volume,用Secret存证书,如果挂载失败,容器启动时找不到证书文件也会触发失败。进入容器后先查目录:
ls -l /certs/
同时验证secret4和secret5的内容是不是证书的Base64编码值,有没有配置错误。
6. 修复ContainerAppSystemLogs_CL表缺失问题
这个表是日志分析工作区的自定义日志表,没出现的话要么是日志没正确发送到工作区,要么是诊断设置没配全。重新配置诊断设置,确保勾选所有日志类别,包括ContainerAppSystemLogs和ContainerAppConsoleLogs。
内容的提问来源于stack exchange,提问作者BeGreen
相关产品推荐
相关产品推荐

