我已经在aws ecs中部署了一些微服务(通过CI/CD到jenkins),每个任务都有自己的服务和任务定义。Apache在前台运行,如果apache崩溃,将从其服务部署docker。
我的开发团队正在使用RabbitMQ在微服务之间进行通信。很少有微服务需要监听RabbitMQ服务器中的特定事件(Rabbit安装在单独的新闻ec2实例上)
为了监听兔MQ服务器,我们应该将监听程序作为守护进程运行吗?开发团队要求在docker部署时运行以下代码,以便侦听rabbit mq服务器。
php /app/public/yii queue/listen并设置cron作业,以便侦听器在崩溃时启动。据我所知,docker容器只能在前台运行一个进程,目前Apache在前台运行。如果我尝试在后台运行守护进程( cron和rabbit侦听器),那么当这些守护进程中的任何一个崩溃时,docker容器都不会重新启动。
对于这种情况,有没有更安全的方法?在docker容器中运行rabbit mq listener的最佳实践是什么?
发布于 2019-03-14 17:35:13
如果你的问题是在一个容器中运行更多的进程,一个更一般的概念是创建一个脚本,例如。在容器中执行start_service.sh,并在docker文件的CMD指令中执行。如下所示:
#!/bin/bash
process1 ... &
process2 ... &
daemon-process1
sleep infinite在后台启动一个进程后,&将使脚本继续运行,即使它不打算作为守护进程运行。最后的无限休眠将阻止脚本退出,这将退出容器。
如果您在容器中运行多个进程,请考虑在容器中使用"init“进程,如dumb-init。点击此处了解更多信息https://github.com/Yelp/dumb-init/blob/master/README.md
https://stackoverflow.com/questions/55158327
复制相似问题