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