这个想法很简单,我需要从容器发送信号到另一个容器重新启动nginx
。
从nginx
中的第一个容器连接到ssh
容器是一个很好的解决方案吗?
你有其他推荐方法吗?
答案 0 :(得分: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 "$@"
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
包。