簡體   English   中英

在docker swarm容器中使用pid 1重新啟動進程(副本)

[英]Restarting process with pid 1 in docker swarm container (replica)

我有在docker swarm中運行的docker nginx。 我想在不重啟容器的情況下更改Nginx的設置。 我替換了容器內的nginx conf文件,但無法重新加載配置

試過了

root@xxx:/# service nginx
Usage: /etc/init.d/nginx {start|stop|status|restart|reload|force-reload|upgrade|configtest}
root@xxx:/# service nginx reload
[....] Reloading nginx: nginxstart-stop-daemon: warning: failed to kill 1: Permission denied
 failed!
root@xxx:/# service nginx force-reload
[....] Reloading nginx: nginxstart-stop-daemon: warning: failed to kill 1: Permission denied
 failed!
root@xxx:/# nginx -s reload
2017/03/17 12:57:05 [notice] 281#281: signal process started
2017/03/17 12:57:05 [alert] 281#281: kill(1, 1) failed (13: Permission denied)
nginx: [alert] kill(1, 1) failed (13: Permission denied)


root@xxx:/# ps aux | grep nginx
root         1  0.0  0.1  36124  5500 ?        Ss   Mar09   0:00 nginx: master process nginx -g daemon off;
nginx        9  0.0  0.1  37328  4476 ?        S    Mar09   7:32 nginx: worker process
root       243  0.0  0.0  11128  1020 ?        S+   12:45   0:00 grep nginx    
root@xxx:/# kill -HUP 1
bash: kill: (1) - Permission denied

有可能嗎?

您似乎走錯了軌道:在docker群中運行服務的要點是,任何實例都可以隨時消失(例如,在節點發生故障時),並被新創建的新實例取代。 這意味着您不應操縱屬於群集集群管理的服務的容器,因為您的更改可能隨時丟失。 您似乎已經將docker exec放入這樣的容器中並手動編輯了配置文件。 這是不行的。 您的更改非常不穩定。

更好的解決方案是使用您的自定義配置創建圖像以用於群體。 每當您的配置更改時,更新映像並用docker service update --image my-custom-image:new-version <my-service>替換正在運行的實例。 Docker將負責推出更新。 如果您的服務與多個實例一起運行,則該更新不會導致停機(滾動更新)。

就是說,如果您從外部向容器發送kill信號,那么您真正要求的內容應該起作用,例如,在實際運行服務實例的Docker節點上發布的docker docker kill -s HUP container-name 由於您已經修改了容器內部的配置,因此您顯然知道如何找到容器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM