zoukankan      html  css  js  c++  java
  • 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镜像原来的命令!

      

  • 相关阅读:
    Java程序员必知的8大排序
    Servlet与JSP间的传值问题
    Servlet上传文件详细解析以及注意事项
    JSP入门学习经验
    统计语言模型(Statistical Language Models)(条件概率公式)
    自定义用户控件ascx
    asp.net相对路径、绝对路径
    A list of supported CSS selectors when invoking g(..)
    一位研究生导师心目中理想的论文(转)
    常用软件
  • 原文地址:https://www.cnblogs.com/shanfeng1000/p/14060545.html
Copyright © 2011-2022 走看看