如何在Docker nginx容器中重启nginx服务且不停止容器
Docker Nginx 配置热重载方案(不停止容器)
Docker 容器的生命周期与 PID 1 进程绑定,你使用service nginx restart时会终止作为 PID 1 的 nginx 主进程,因此容器会自动退出。使用 nginx 自带的热重载能力即可在不停止容器的前提下加载新配置,操作如下:
第一步:校验配置合法性
重载前必须先验证配置语法正确性,避免重载失败影响服务:
- 宿主机直接执行(无需进入容器):
docker exec nginx nginx -t - 已进入容器bash交互界面时直接执行:
nginx -t
返回test is successful即代表配置无语法错误,可以执行重载。
第二步:执行热重载
方式1:直接调用nginx重载命令(最常用)
- 宿主机执行:
docker exec nginx nginx -s reload - 容器内执行:
nginx -s reload
方式2:发送SIGHUP信号触发重载
直接向容器发送SIGHUP信号,效果和上述命令完全一致:
docker kill -s SIGHUP nginx
原理说明
热重载过程中nginx主进程会保持运行,验证新配置无误后启动新的worker进程处理新请求,旧worker进程处理完存量请求后自动退出,全程服务无中断,PID1的nginx主进程始终存活,因此容器不会停止。
内容的提问来源于stack exchange,提问作者Shuzheng
相关产品推荐
相关产品推荐

