如何在Docker容器中运行Nginx而不停止?

我有一个Docker容器上安装Nginx,并试图像这样运行它:

docker run -i -t -p 80:80 mydockerimage /usr/sbin/nginx 

问题是,Nginx的工作方式是,初始化过程立即产生一个主Nginx进程和一些工作者,然后退出。 由于Docker只能看到原始命令的PID,容器会暂停。

我如何防止容器中止? 我需要能够告诉它绑定到第一个subprocess,或停止Nginx的初始进程退出。

nginx像所有行为良好的程序一样,可以configuration为不自我守护进程。

使用http://wiki.nginx.org/CoreModule中描述的;daemon offconfiguration指令。

为了扩展Charles Duffy的答案,Nginx使用daemon off指令在前台运行。 如果把它放在configuration文件中是不方便的,我们可以直接在命令行中指定它。 这使得运行在debugging模式(前台)很容易,并通过改变命令行参数直接切换到生产模式(后台)运行。

在前台运行:

 nginx -g 'daemon off;' 

在后台运行:

 nginx 

为了扩展John的答案,你也可以使用Dockerfile CMD命令(如果你希望它自己启动没有额外的参数)

 CMD ["nginx", "-g", "daemon off;"] 

这里有一个运行nginx的Dockerfile的例子。 正如Charles提到的那样,它使用daemon offconfiguration:

https://github.com/darron/docker-nginx-php5/blob/master/Dockerfile#L17

将此命令添加到Dockerfile可以禁用它:

 RUN echo "daemon off;" >> /etc/nginx/nginx.conf 

使用supervisord或runit [1]进行服务pipe理也是一个好主意。

[1] https://github.com/phusion/baseimage-docker