仅在前一个容器运行后启动容器

时间:2017-02-25 16:37:26

标签: docker kubernetes

假设我有3个容器X,Y和Z.我希望容器Y仅在容器X运行后启动,容器Z仅在Y运行后启动。

我该怎么做?

2 个答案:

答案 0 :(得分:2)

你应该考虑重新设计你的应用程序部分,如果它们有如此重的依赖关系,那么它们可能不应该分成不同的容器,或者你应该使用一些解密来避免

你能做的是:

  1. 还有一个init containers
  2. 在每个容器中都有entrypoint script阻塞,直到满足依赖性
  3. 在群集外部实施控制哪些pod启动的内容。
  4. 撰写custom controller

答案 1 :(得分:2)

您可以使用docker-compose文件和depends_on选项来控制容器启动顺序

以下是您的示例的docker-compose.yml的外观:

version: '3'
services:
  X:
    image: X_image

  Y:
    image: Y_image
    depends_on: X

  Z:
    image: Z_image
    depends_on: Y
  

注意depends_on在启动Y之前不会等待X“准备就绪” - 直到它正在运行。如果您需要等待服务准备就绪,请参阅Controlling startup order以了解有关此问题的更多信息以及解决此问题的策略。