暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Docker容器内运行多进程问题

运维DevOps 2022-03-06
4672
Docker的设计机制为默认情况下一个容器中只能运行一个进程,但是在日常工作中,有时候需要在一个容器内运行多个进程的情况,比如,搭建redis哨兵。
redis通过容器来跑,那么搭建哨兵有两种方式,第一种是单独再跑一个容器用来运行哨兵,还有一种方式是直接在现在redis容器内部运行一个哨兵进程(不太推荐,如果测试环境可以考虑)。

下面的Dockerfile是运行redis以及哨兵的例子,其中以redis为基础镜像,将redis,conf配置文件和哨兵配置文件copy到容器中,并将启动脚本也拷贝进去,最后执行脚本 ,如图:


start.sh脚本内容如下:


从上图中可以看出,启动redis的命令后面加了一个后台运行符号’&’ ,如果不加这个符号,那么redis就会在前台运行,那么哨兵程序就不会在继续执行,如果加了’&’,那么第一个redis就会在后台运行,然后启动第二个哨兵程序,哨兵程序在前台运行,从而保证容器可持续运行

启动容器后可以看到内部跑了两个进程,如图:


总结:

  • 容器中运行多个进程时,前面的进程要用后台方式运行(或添加 &),否则后面的服务无法启动

  • 容器中最后一个守护进程一定要用前台方式运行,否则start.sh退出,容器退出,所有的服务就白启动了


一个docker容器同时只能管理一个前台进程

文章转载自运维DevOps,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论