【问题标题】:Docker Compose activate container on demandDocker Compose 按需激活容器
【发布时间】:2019-02-01 18:26:51
【问题描述】:

我有一个对数据馈送执行详细说明的应用程序。该过程分为任务,因此我构造了一个docker-compose.yml 文件,如下所示:

task1-service: 
  image: task1-image
task2-service: 
  image: task2-image
task3-service: 
  image: task3-image

每个task-service在前一个结束触发后触发下一个,然后就可以退出了。所以没有必要让每个服务都运行。

我想知道是否有解决方案让它们全部停止,并在需要时按需启动每个服务。 我不知道docker compose 是否是正确的解决方案,但我喜欢将系统描述到一个yml 文件中的想法。无论如何,其他解决方案表示赞赏。

谢谢

【问题讨论】:

    标签: docker docker-compose orchestration


    【解决方案1】:

    有可能以不同的方式解决您的方法,其中之一是docker-compose

    首先,您可以使用docker-compose up -d <service_name> 启动一个具体服务(taskX-service) 你有更多的细节docker-compose up for only certain containers

    其次,docker-compose 还允许您配置容器之间的依赖关系。如果要按顺序运行它们,可以在depends_on: 结构中指定。 例如,要按顺序执行任务 1、2 和 3,您可以使用:

    task1-service: 
      image: task1-image
    task2-service: 
      image: task2-image
      depends_on:
        - task1-service
    task3-service: 
      image: task3-image
      depends_on: 
        - task2-service
    

    另外,这个 docker-compose.yml 兼容我先说的:

    docker-compose up -d task1-service
    docker-compose up -d task2-service (also launchs task1-service)
    docker-compose up -d task3-service (also launchs task2 and 1 service)
    

    如果您不指定任何容器,docker-compose down 会停止撰写文件中的所有容器。 希望对你有用。

    【讨论】:

    • 感谢@mulg0r,我会试一试。但是,每个服务都应该能够调用下一个任务(或者更好的是,在有人听的时候发出一个事件)。依赖并非如此:任务应该单独且独立地运行。
    • 好的,在这种情况下你说,也许对你挂载volume: /var/run/docker.sock:/var/run/docker.sock启动服务有用。因此,您可以从另一个容器启动 docker 容器/服务,而不仅仅是从主机启动,当然,您总是在其中安装了 docker 守护进程
    • 请注意,depends_on 仅确保其他服务将启动,但不会等待它们完成,即这将立即启动所有服务,而不是按顺序启动! In docker-compose.yml version 2.x you could use the condition form of depends_onhealthcheck 强制等待直到另一个容器“准备好”或完成。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    • 1970-01-01
    • 2018-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多