我们使用nginx作为Docker-Cloud服务的反向代理。每当在Docker Cloud上部署新服务时或在Docker-Cloud上获得新URL时,实现脚本以更新NGINX的配置文件。
NGINX和脚本已分别在Docker容器中运行。NGINX配置文件安装在主机(ECS)中。使用脚本更新配置文件后,它需要重新加载NGINX才能应用更改。
首先,我想知道这是否是更新nginx配置文件的最佳方法,以及在没有任何停机时间的情况下重新加载nginx的最佳方法是什么?
每次更新后,我是否可以重新创建NGINX容器?如果是这样,如何?
或通过监视配置文件中的更改(使用脚本)中的更改并使用以下命令重新加载它?
,可以从主机重新加载NGINXdocker 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
软件包。