2017-02-21 106 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

相關問題