docker启动nginx后挂了_docker——nginx运行起不来或者说起来了又挂了

记得刚开始玩docker的时候,想着docker上运行一个nginx代理,于是写了个Dockerfile:

FROM nginx:latest

WORKDIR .

COPY demo.conf /etc/nginx/conf.d/demo.conf

EXPOSE 80

CMD [ "nginx" ]

然后docker build生成,docker run运行,发现怎么都起不来,或者说起来了又挂了,到/var/lib/docker/containers目录下查看日志发现启动也是正常的:

#生成

sudo docker build -t nginx:v1 .

#运行

sudo docker run -id nginx:v1

#或者运行

sudo docker run -id nginx:v1 nginx

在百度查到,nginx默认是后台启动的,一般的我们启动nginx进程就是直接输入nginx,然后回车,但是docker的CMD要求命令能将进程挂起来,也就是hold住,显然,正常使用nginx命令启动不满足这个条件

后来查到,添加daemon off;配置可以让nginx在前台启动,于是我修改Dockerfile:

FROM nginx:latest

WORKDIR .

COPY demo.conf /etc/nginx/conf.d/demo.conf

EXPOSE 80

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

CMD [ "nginx" ]

然后build&run,果然nginx完美的起来了!

其实我们是可以直接使用nginx镜像的,但是为什么使用Dockerfile就不行了呢?于是我直接使用nginx镜像创建一个容器,然后ps查看容器启动的命令:

#创建一个容器

sudo docker run -id nginx:latest

#查看运行中的容器状态,--no-trunc是显示所有的信息,不进行截取

sudo docker ps --no-trunc

结果显示:

可以看到它是使用下面命令启动的:

/docker-entrypoint.sh nginx -g 'daemon off;'

注意后面的daemon off;,于是我将Dockerfile改成:

FROM nginx:latest

WORKDIR .

COPY demo.conf /etc/nginx/conf.d/demo.conf

EXPOSE 80

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

成功启动!

另外,我们也可以在docker run时覆盖这个CMD,如:

#注意,这里的daemon off;需要使用引号包起来!

sudo docker run -id nginx:v1 nginx -g 'daemon off;'

其实,我们完全没有必要在Dockerfile里面添加一个CMD命令启动!因为添加了就是覆盖了nginx镜像原来的命令!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值