zoukankan      html  css  js  c++  java
  • Docker为什么刚运行就退出了

    引言

    最近群里的好多新接触Docker的朋友,好多都遇到了相同的问题,使用

    $ docker run -d ubuntu /bin/bash

    运行了一个简单的容器后,然后docker ps -a 进行查看, 会发现容器已经退出了。

    其实呢,这个问题并不复杂,了解了下面的内容,我想,你就知道该如何处理了.

    根源

    很重要的要说明的一点: Docker容器后台运行,就必须有一个前台进程.
    容器运行的命令如果不是那些一直挂起的命令(比如运行top,tail),就是会自动退出的

    这个是 docker 的机制问题,比如你的 web 容器,我们以 nginx 和 fpm 为例,
    正常情况下,我们配置启动服务只需要启动响应的 service 即可,例如

    service nginx start && service php5-fpm start

    但是,这样做, nginx 和 fpm 均为后台进程模式运行,就导致 docker 前台没有运行的应用,
    这样的容器,后台启动后,会立即自杀,因为他觉得他没事可做了.

    解决方法

    1. 最佳的解决方案是,将你要运行的程序以前台进程的形式运行,当然,如果你的容器需要同时启动多个进程,
    那么也只需要,或者说只能将其中一个挂起到前台即可.
    比如上面所说的 web 容器,我们只需要将启动指令修改为:

    service php5-fpm start && nginx -g "daemon off;"

    这样,fpm会在容器中以后台进程的方式运行,而nginx则挂起进程至前台运行,这样,就可以保持容器不会认为没事可做而自杀了.

    2. 对于有一些你可能不知道怎么前台运行的程序,提供一个投机方案,你只需要在你启动的命令之后,添加类似于 tail top 这种可以前台运行的程序,这里特别推荐 tail ,然后持续输出你的log文件.
    还是以上文的web容器为例,我们还可以写成:

    service nginx start && service php5-fpm start && tail -f /var/log/nginx/error.log

    >>>>>END<<<<<<

    博客搬运地址

  • 相关阅读:
    HDU 2865 Birthday Toy
    POJ 2888 Magic Bracelet
    BZOJ 3105 新Nim游戏
    BZOJ 2916 Monochromatic Triangles
    Countries
    Memory and Scores
    Paint on a Wall
    这是一道智障题
    可持久化数据结构
    数一的逆袭
  • 原文地址:https://www.cnblogs.com/clement-jiao/p/9314223.html
Copyright © 2011-2022 走看看