代码之家  ›  专栏  ›  技术社区  ›  Jim

是否存在容器继续运行的最低条件?

  •  0
  • Jim  · 技术社区  · 6 年前

    当入口点指定在后台运行命令时,为什么容器会退出? 如果我跑 docker run -d ubuntu bash -c "sleep 12000&" 容器退出。如果我跑 docker run -d ubuntu bash -c "sleep 12000" 容器继续运行。
    后台进程是否足以使容器保持运行?
    为什么 sleep 在后台或前台运行会影响这一点?

    3 回复  |  直到 6 年前
        1
  •  1
  •   grapes    6 年前

    根据码头工人的说法,集装箱应该在

    容器的主进程(PID 1)正在运行

    在您的案例中,主要流程 bash 容器“运行”直到这个过程退出。

        2
  •  1
  •   Siyu Zeeshan Akhter    6 年前

    根据葡萄的建议,条件是pid 1正在运行。

    容器被设计为短期的,专门用于一个任务(微服务),在前台作为pid 1运行。当然,背景对于ssh之类的东西很有用,但是容器必须有一个主任务。

    大多数服务都可以在前台或后台运行(非监控)

    另外,如果你必须保持一个容器的活性,使用 tail -f /dev/null 作为 CMD

        3
  •  1
  •   David Maze    6 年前

    一个简单的条件可能是:如果您在本地运行一个命令,它立即返回并返回一个shell提示,那么如果您将该命令作为容器中的主进程运行,容器将立即退出。

    通常的最佳实践是让容器作为 前景 进程,当该服务器退出时,容器就完成了。在理想情况下,容器是完全自主的:一旦你 docker run 它不需要任何用户干预就可以完成它的工作。(在这个模型中,一个普通的Ubuntu容器,没有安装软件,只有 sleep S,是不是很有趣。)