最近在看docker如何让容器在启动时直接运行某些进程,后来发现Dockerfile可以在容器启动的时候指定容器运行命令。
CMD指定,但是每个Dockerfile只能有一条CMD指令,如果指定了多条CMD指定,只有最后一条会被执行。
于是就想了一个办法,在写了一个脚本,在脚本里面启动多个进程,在Dockerfile里运行这个脚本。
最后证明这个方法是可行的,在实验过程中遇到一个问题,容器启动后会马上停止。
经查阅资料:
Docker容器同时只能管理一个进程,如果这个进程退出那么容器也就退出了,但这不表示容器只能运行一个进程(其他进程可在后台运行),但是要使容器不退出必须有一个前台执行的进程。
解决方法:
脚本中最后一个进程一定要用前台运行方式即在进程最后不加&(&表示后台运行),否则容器会退出。
ref: https://blog.youkuaiyun.com/do_it_/article/details/80014321
----------------------------------------------------------------分割线----------------------------------------------------------------------
当在docker中使用uwsgi时,如果在uwsgi.ini配置文件中指定了daemonize参数,容器的uwsgi应用的日志将会输出到指定的文件, 进程会在后台运行,而不是在前台运行,这样就造成通过docker run启动或者compose启动时容器立刻退出的情况