2017-02-21 104 views

回答

4

我不建议安装ssh,Docker容器不是虚拟机,并且应该尊重微服务架构从它提供的许多优点中受益。

为了将信号从一个容器发送到另一个容器,您可以使用docker API。

首先,您需要在所需容器之间共享/var/run/docker.sock

docker run -d --name control -v /var/run/docker.sock:/var/run/docker.sock <Control Container> 

发送信号到nginx的命名容器,你可以做到以下几点:

echo -e "POST /containers/nginx/kill?signal=HUP HTTP/1.0\r\n" | \ 
nc -U /var/run/docker.sock 

另一个选项使用自定义图像,具有自定义脚本,用于检查nginx的配置文件,如果散列被改变发送重载信号。这样,每次更改配置时,nginx都会自动重新加载,或者您可以使用注释手动重新加载。这些脚本在kubernetes用户中很常见。以下是一个例子:

nginx "[email protected]" 
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包。

+0

让外部入口点重新启动nginx并不危险? – Tali

+0

取决于你的环境,有很多选项,你可以共享配置数据有很多其他选项 –

+0

问题是我需要成为根用户重新启动nginx,如果可能,我preferer没有外部入口点。 – Tali

相关问题