博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
docker运行nginx为什么要使用 daemon off
阅读量:7092 次
发布时间:2019-06-28

本文共 1508 字,大约阅读时间需要 5 分钟。

很开心啊,遇到这个问题,就要讲讲docker容器的进程原理了,基本上了解过docker的人都清楚docker的几个隔离方式,那么进程同样是进行隔离。

问题

1.docker容器跑着为啥会挂掉?

docker 容器默认会把容器内部第一个进程,也就是pid=1的程序作为docker容器是否正在运行的依据,

如果docker 容器pid挂了,那么docker容器便会直接退出


2.docker run的时候把command最为容器内部命令,如果你使用nginx,那么nginx程序将后台运行,这个时候nginx并不是pid为1的程序,而是执行的bash,这个bash执行了nginx指令后就挂了,所以容器也就退出了,和你这个一样的道理,pm2 start 过后,bash 的pid为1,那么此时bash执行完以后会退出,所以容器也就退出了。

下面我使用实例告诉why we do this!!

touch file get_pid

<code class="bash">echo "PID of this script: $$"

echo
"PPID of this script: $PPID"
echo
"UID of this script: $UID"

#nginx -g 'daemon off;'</code>


此时我们启动容器去执行这个sh文件

<code>odtoy:~ zhaojunlike$ eval `docker-machine env
default
`
godtoy:~ zhaojunlike$ cd WorkSpace/
godtoy:WorkSpace zhaojunlike$ ls
docker    nodejs    php    pid_get
godtoy:WorkSpace zhaojunlike$ vim pid_get
godtoy:WorkSpace zhaojunlike$ docker run -v `pwd`/pid_get:/pid_get:ro --rm --workdir=/ nginx bash /pid_get
PID of
this
script: 1
PPID of
this
script: 0
UID of
this
script: 0
godtoy:WorkSpace zhaojunlike$ </code>


在容器执行完pid_get 后,容器也就自动退出了,这个时候,打印出了当前的bash运行的pid是1。

所以,如果我们想让容器不挂掉,那么非守护进行的执行是必须得,当然下面也能去让一个容器内部,执行

<code>godtoy:WorkSpace zhaojunlike$ docker run -it nginx bash
root@a8baa5fe77f0:/# nginx
root@a8baa5fe77f0:/# godtoy:WorkSpace zhaojunlike$ </code>

我们使用-it参数可以连接到容器内部的管道,然后我们在容器内部使用nginx命令。最后Ctrl+P+Q退出容器后,容器依然运行。

总结

如果楼主是需要去在docker中使用node,那么就没必要去安装pm2等工具了,直接node,如果你怕你的容器会挂掉,可以加上restart等相关参数比如`docker run .... --restart=always


以上紧紧是个人总结,如果有不对的地方,欢迎网友纠正。

本文转自 Mr_sheng 51CTO博客,原文链接:
http://blog.51cto.com/sf1314/1979312

转载地址:http://qriql.baihongyu.com/

你可能感兴趣的文章
Android Studio的Signature Versions选择,分别是什么意思
查看>>
SQL Server 存储中间结果集
查看>>
模拟Snap.com,支持js引入对链接预览的简单实现
查看>>
Kotlin语法(函数和lambda表达式)
查看>>
Kotlin语法(其他)
查看>>
angularjs1-3,$apply,$watch
查看>>
正则表达式2
查看>>
Java总结篇系列:Java泛型
查看>>
Node.js mm131图片批量下载爬虫1.01 增加断点续传功能
查看>>
使用ExtJs开发MIS系统(2):Js的动态加载
查看>>
扑克牌概率
查看>>
子窗口和父窗口交互
查看>>
JMS学习(七)-ActiveMQ消息的持久存储方式之KahaDB存储
查看>>
QTP的那些事--有关一个webtable数据的获取案例
查看>>
.Net下一个Winform方案可以让MessageBox.Show它显示在父窗口的中间
查看>>
【原创】开源.NET排列组合组件KwCombinatorics使用(一)—组合生成
查看>>
关于Patter类和Match类
查看>>
Linux下iptables的简介和自己的记录
查看>>
类的operator new与operator delete的重载
查看>>
tn文本分析语言(三):高级语法
查看>>