[英]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.