Sel*_*ldo 105 linux nginx docker
我在Docker容器上安装了Nginx,我试图像这样运行它:
docker run -i -t -p 80:80 mydockerimage /usr/sbin/nginx
Run Code Online (Sandbox Code Playgroud)
问题在于Nginx的工作方式是初始进程立即产生一个主Nginx进程和一些工作者,然后退出.由于Docker只监视原始命令的PID,因此容器停止.
如何防止容器停止?我需要能够告诉它绑定到第一个子进程,或者阻止Nginx的初始进程退出.
Cha*_*ffy 147
nginx和所有表现良好的程序一样,可以配置为不进行自我守护.
使用http://wiki.nginx.org/CoreModule中daemon off描述的配置指令.
joh*_*all 140
为了扩展Charles Duffy的答案,Nginx使用该daemon off指令在前台运行.如果将它放在配置文件中不方便,我们可以直接在命令行中指定它.这使得在调试模式(前台)中运行变得容易,并通过更改命令行参数直接切换到在生产模式(后台)中运行.
要在前台运行:
nginx -g 'daemon off;'
Run Code Online (Sandbox Code Playgroud)
要在后台运行:
nginx
Run Code Online (Sandbox Code Playgroud)
Tom*_*vid 48
要扩展John的答案,您还可以使用以下Dockerfile CMD命令(如果您希望它自行启动而无需额外的args)
CMD ["nginx", "-g", "daemon off;"]
Run Code Online (Sandbox Code Playgroud)
num*_*er5 19
仅供参考,截至今天(2019 年 10 月 22 日)官方 Nginx docker 镜像都有一行:
CMD ["nginx", "-g", "daemon off;"]
Run Code Online (Sandbox Code Playgroud)
将此命令添加到Dockerfile可以禁用它:
RUN echo "daemon off;" >> /etc/nginx/nginx.conf
Run Code Online (Sandbox Code Playgroud)
要添加 Tomer 和 Charles 的答案,
使用 Entrypoint 在 Docker 容器中的前台运行 nginx 的语法:
ENTRYPOINT nginx -g 'daemon off;'
Run Code Online (Sandbox Code Playgroud)
不直接相关,但使用 Entrypoint 运行多个命令:
ENTRYPOINT /bin/bash -x /myscripts/myscript.sh && nginx -g 'daemon off;'
Run Code Online (Sandbox Code Playgroud)
这里有一个运行nginx的Dockerfile示例.正如Charles所提到的,它使用了daemon off配置:
https://github.com/darron/docker-nginx-php5/blob/master/Dockerfile#L17
| 归档时间: |
|
| 查看次数: |
108497 次 |
| 最近记录: |