2014-10-10 73 views
4

我想添加/刪除一個碼頭工人容器重啓nginx的容器,當上遊服務器更新

我使用Dockerfile add命令我nginx.conf添加到/ etc/nginx的目錄內運行在Nginx的我的服務器。

# Copy a configuration file from the current directory 
ADD nginx.conf /etc/nginx/ 

然後在我運行nginx的容器,它有一個像這樣

# List of application servers 
upstream app_servers { 
    server 172.17.0.91:9000; 
    server 172.17.0.92:9000; 
    server 172.17.0.93:9000; 
} 

如何重新啓動我的nginx採取編輯nginx.conf的效果CONF?

謝謝你提前!

+1

因爲要修改你的Dockerfile容器,你需要重建碼頭工人形象,從而從該映像運行一個新的容器。沒有辦法可以重新啓動位於廢棄容器中的nginx進程來讀取它沒有的新配置文件。 – Thomasleveil 2014-10-10 08:01:45

+0

我想我真的很不理解碼頭工人。我想,外部腳本,當更新時,我會做碼頭重啓或其他生效。它有點不方便重建圖像。因爲我有其他腳本修改nginx配置。我想,我會退出使用nginx docker。但是,嘿,我使用碼頭沉重地對其他應用程序。感謝你的回答。 – Hokutosei 2014-10-10 13:16:33

回答

1

如果你想從一個容器內做到這一點,你將需要服務/配置發現。像coreOS/etcdApache Zookeeper這樣的工具是爲了促進這一過程。公平的警告:對於簡單的應用程序,這些可能有點難以管理。

還有docker-gen,這有點容易起來。您正在描述的場景中甚至有一個specific pre-made script

+0

謝謝nanaeu,現在生病了吧。病後回來,我的結果是什麼。如果這有效,我可能會改變在生產中使用它。截至目前,我們只有容器,裸露的nginx和清漆。當然在測試機器上測試nginx容器。再次感謝您的建議! – Hokutosei 2014-10-10 17:15:33

16

初始化Docker Swarm時不建議重新啓動容器,因爲它可能會刪除nginx服務。所以如果你需要替代品docker restart;你可以去容器內,只是運行nginx -s reload

例如,在搬運工ENV,如果有一個名爲nginx

docker exec <nginx_container_id> nginx -s reload 
+2

這似乎是更好,更不具破壞性的答案。 – 2018-01-03 18:21:34