繁体   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