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



我们使用nginx作为Docker-Cloud服务的反向代理。每当在Docker Cloud上部署新服务时或在Docker-Cloud上获得新URL时,实现脚本以更新NGINX的配置文件。

NGINX和脚本已分别在Docker容器中运行。NGINX配置文件安装在主机(ECS)中。使用脚本更新配置文件后,它需要重新加载NGINX才能应用更改。

首先,我想知道这是否是更新nginx配置文件的最佳方法,以及在没有任何停机时间的情况下重新加载nginx的最佳方法是什么?

每次更新后,我是否可以重新创建NGINX容器?如果是这样,如何?

或通过监视配置文件中的更改(使用脚本)中的更改并使用以下命令重新加载它?

,可以从主机重新加载NGINX
docker exec NginxcontainerID | nginx -s reload    

每次更新后,我是否可以重新创建NGINX容器?如果是这样,如何?

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

docker exec nginxcontainername/id nginx -s reload

docker kill -s HUP nginxcontainername/id 

另一个选项将使用自定义图像,并在更改时检查Nginx Config checksum和Reload nginx。示例脚本:

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软件包。

相关内容

  • 没有找到相关文章

最新更新