如何配置Azure Web App容器实现优雅停机(响应SIGTERM)
Azure Web App容器响应SIGTERM信号配置方案
核心需求
使用Azure Web App托管Docker容器时,实现容器接收并响应SIGTERM信号,完成Python应用和Java Bot的优雅停机,避免进程强制终止导致的数据丢失或异常。
具体配置步骤
1. 完善entrypoint.sh脚本
你提供的脚本已实现SIGTERM信号捕获与优雅清理逻辑,需注意以下细节:
- 脚本开头的
#!/bin/bash确保使用bash解释器 - 通过
trap 'cleanup' SIGTERM注册信号处理函数 - 后台启动进程后记录PID,便于后续精准终止
wait -n保证任意进程异常退出时也能触发清理流程
脚本代码如下:
#!/bin/bash # 优雅停止进程并清理的函数 cleanup() { echo "Received termination signal. Stopping processes gracefully..." # 停止Python应用 echo "Stopping app..." kill $python_pid # 停止Java Bot echo "Stopping Bot" kill $java_pid # 等待进程完全终止 wait $python_pid wait $java_pid echo "All processes have been stopped. Exiting..." exit 0 } # 捕获SIGTERM信号并调用清理函数 trap 'cleanup' SIGTERM # 启动ML应用 cd /app echo "Starting app..." gunicorn --log-level debug --access-logfile - --error-logfile - -b :5000 wsgi:app & python_pid=$! # 启动Slack Bot cd /bot echo "Starting Bot." java -jar hrbs.jar & java_pid=$! # 等待任意进程结束 wait -n $python_pid $java_pid # 异常退出时执行清理(正常场景下不会走到这里) cleanup
2. Dockerfile配置(关键:确保脚本以PID 1运行)
只有PID 1进程才能接收宿主机发送的SIGTERM信号,需在Dockerfile中正确设置ENTRYPOINT,让脚本成为容器的PID 1进程:
# 选择合适的基础镜像(示例为Python+Java混合环境) FROM python:3.9-slim-bullseye # 安装Java运行时(根据你的Bot版本调整) RUN apt-get update && apt-get install -y openjdk-11-jre-headless && rm -rf /var/lib/apt/lists/* # 复制应用文件到容器 COPY ./app /app COPY ./bot /bot COPY entrypoint.sh /entrypoint.sh # 赋予脚本执行权限 RUN chmod +x /entrypoint.sh # 设置ENTRYPOINT,确保脚本作为PID 1进程启动 ENTRYPOINT ["/entrypoint.sh"]
3. Azure Web App优雅停机配置
在Azure门户中完成以下设置,给容器足够的时间处理SIGTERM信号:
- 进入你的Web App -> 配置 -> 常规设置
- 找到优雅停机超时选项,设置合理的超时时间(建议30-60秒),确保容器有足够时间完成进程清理
- 无需额外设置启动命令,Dockerfile中的ENTRYPOINT会自动生效
验证方法
重启Azure Web App后,查看容器日志(Web App -> 日志流),若能看到Received termination signal. Stopping processes gracefully...等日志内容,说明SIGTERM信号已被成功捕获并处理。
常见问题排查
- 若脚本未接收到SIGTERM:检查容器内PID 1进程是否为entrypoint.sh,可通过
docker exec <容器ID> ps aux查看。若PID 1是bash或其他进程,需调整Dockerfile的ENTRYPOINT配置,确保脚本直接作为PID 1启动。 - 进程无法正常停止:检查
kill命令是否能正确终止目标进程,若进程忽略SIGTERM,可尝试使用kill -SIGINT作为兜底方案(优先优化进程自身的信号响应逻辑,避免强制终止)。
内容的提问来源于stack exchange,提问作者Kraken194
相关产品推荐
相关产品推荐

