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鏡像原來的命令!

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM