首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以零停机时间更新容器中的Nginx配置文件

以零停机时间更新容器中的Nginx配置文件
EN

Stack Overflow用户
提问于 2017-03-04 16:44:50
回答 1查看 6.5K关注 0票数 5

我们正在使用Nginx作为对接云服务的反向代理。每当新服务部署到docker云中或服务在docker云上获得新url时,都会实现一个脚本来更新Nginx的配置文件。

Nginx和脚本分别在一个码头容器中运行。Nginx配置文件被挂载在主机(ECS)中。使用脚本更新配置文件后,它需要重新加载Nginx,以便应用更改。

首先,我想知道这是否是更新Nginx配置文件的最佳方式,以及在不停机的情况下重新加载Nginx的最佳方法是什么?

每次更新后,我应该重新创建Nginx容器吗?如果是,怎么做?

或者,通过监视配置文件中的更改(使用脚本)重新加载Nginx并使用下面的命令重新加载Nginx也可以吗?

代码语言:javascript
复制
docker exec NginxcontainerID | nginx -s reload    
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-05 06:44:36

每次更新后,我应该重新创建Nginx容器吗?如果是,怎么做?

不,你只需要在大部分时间重新加载nginx服务。您可以使用:

代码语言:javascript
复制
docker exec nginxcontainername/id nginx -s reload

代码语言:javascript
复制
docker kill -s HUP nginxcontainername/id 

的另一个选项是使用自定义映像并检查nginx、校验和,并在nginx更改时重新加载nginx。示例脚本:

代码语言:javascript
复制
nginx "$@"
oldcksum=`cksum /etc/nginx/conf.d/default.conf`

inotifywait -e modify,move,create,delete -mr --timefmt '%d/%m/%y %H:%M' --format '%T' \
/etc/nginx/conf.d/ | while read date time; do

    newcksum=`cksum /etc/nginx/conf.d/default.conf`
    if [ "$newcksum" != "$oldcksum" ]; then
        echo "At ${time} on ${date}, config file update detected."
        oldcksum=$newcksum
        nginx -s reload
    fi

done

您需要安装inotifywait包。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42598542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档