同一主机上两个容器之间的通信

时间:2017-02-21 09:49:04

标签: nginx docker dockerfile

这个想法很简单,我需要从容器发送信号到另一个容器重新启动nginx

nginx中的第一个容器连接到ssh容器是一个很好的解决方案吗?

你有其他推荐方法吗?

1 个答案:

答案 0 :(得分:4)

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

为了将信号从一个容器发送到另一个容器,您可以使用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包。