当前位置: 首页 > Linux

为什么用daemonoff

时间:2023-04-06 23:10:22 Linux

来运行nginxwithdocker?我很高兴。遇到这个问题,我就说说docker容器的进程原理。基本上了解过docker的人都知道docker的几种隔离方式,所以流程都是一样的被隔离。问题一、为什么docker容器在运行的时候会挂掉?默认情况下,docker容器会使用容器内部的第一个进程,即pid=1的程序,作为docker容器是否运行的依据。如果docker容器pid挂了,docker容器会直接退出。2、docker运行时,使用command作为容器内部命令。如果你使用nginx,nginx程序会在后台运行。这时候nginx就不是一个pid为1的程序,而是一个执行的bash。这个bash执行完nginx命令后,会运行Hangup,所以容器会退出,和你的道理一样,pm2启动后,bash的pid为1,那么此时执行完bash会退出,所以容器也会退出。下面我用例子来告诉我们为什么要这样做!!touchfileget_pidecho"此脚本的PID:$$"echo"此脚本的PPID:$PPID"echo"此脚本的UID:$UID"#nginx-g'daemonoff;'此时我们启动容器执行这个sh文件odtoy:~zhaojunlike$eval`docker-machineenvdefault`godtoy:~zhaojunlike$cdWorkSpace/godtoy:WorkSpacezhaojunlike$lsdockernodejsphppid_getgodtoy:WorkSpacezhaojunlike$vimpid_getgodtoy:WorkSpacezhaojunlike$dockerwd`v`prun-pid_get:/pid_get:ro--rm--workdir=/nginxbash/pid_get本脚本的PID:1本脚本的PPID:0本脚本的UID:0godtoy:WorkSpacezhaojunlike$之后container执行pid_get,container会自动退出,此时打印出当前bash运行的pid为1。因此,如果我们想要container不挂掉,非guard执行是必须的。当然我们也可以执行godtoy:WorkSpacezhaojunlike$dockerrun-itnginxbashroot@a8baa5fe77f0:/#nginxroot@a8baa5fe77f0:/#godtoy:WorkSpacezhaojunlike$我们使用-it参数连接容器内部的管道,以及然后我们在容器内使用nginx命令。最后Ctrl+P+Q退出容器后,容器还在运行。总结一下,如果你需要在docker中使用node,那么就不用安装pm2等工具了,直接node,如果怕你的容器挂掉,可以加上restart等相关参数`码头工人运行......--restart=always以上只是个人总结。如有不妥欢迎网友指正。