2017-02-21 21 views
1

考え方は単純です。コンテナから別のコンテナへ信号を送信して、nginxを再起動する必要があります。同じホスト上の2つのコンテナ間の通信

コンテナに最初のコンテナを接続します。sshは良い解決策ですか?

他にもおすすめの方法がありますか?

答えて

4

sshDockerコンテナは仮想マシンではありません。また、マイクロサービスアーキテクチャを尊重して、それが提供する多くの利点の恩恵を受ける必要があります。

1つのコンテナから別のコンテナに信号を送信するために、ドッカーAPIを使用できます。

最初に、必要なコンテナ間で/var/run/docker.sockを共有する必要があります。あなたは次の操作を行うことができますnginxの名前のコンテナに信号を送信するために

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

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を再起動するにはrootユーザーでなければなりません。 – Tali

関連する問題