【问题标题】:How to start Docker container only after another container is exited如何仅在退出另一个容器后启动 Docker 容器
【发布时间】:2017-04-30 23:53:01
【问题描述】:

假设我有 2 个容器:composerphp,它们共享相同的代码库,即相同的卷。我想用一个像docker-compose up这样的docker-compose命令来管理它们。

所以问题是我怎样才能一个一个地启动这些容器,而不是同时启动?我的意思是,只有在composer 退出后才启动我的php 容器,即composer 容器应该为我的php 容器安装所有供应商并退出,然后只有php 容器应该启动一个内置已安装供应商的 PHP Web 服务器。

附:现在我得到了两个容器同时启动的行为。所以我的php 容器正在尝试在没有供应商的情况下启动 Web 服务器,而composer 容器正在尝试安装这些供应商。

这种情况有好的解决办法吗?

【问题讨论】:

  • 您可以编写一个脚本,检查docker ps --filter "name=composer" 或更短的docker ps -q --filter "name=composer" 返回的内容。如果你没有得到一串数字和字母(最后一个),这意味着它退出了。您也可以收听docker eventsdocker events --filter 'container=7805c1d35632' 并寻找“container die”之类的。我认为你最好的选择是docker events --filter 'container=7805c1d35632' --filter 'event=stop'检查文档docs.docker.com/engine/reference/commandline/events
  • 嘿@user2915097,非常感谢您提供这些信息。然而,这真的很有意义,我看到的唯一问题是我应该在我的主机上运行这个过滤脚本,而不是在容器内。但是我可以在容器内进行类似的检查吗?然后我可以运行一个无限循环,它每 2 秒检查一次 composer 容器是否已经死亡,然后将完成无限循环并运行内置的 Web 服务器。你有什么想法吗?
  • 是的,您可以,您需要在启动容器时挂载 docker 套接字,例如 docker run -v /var/run/docker.sock:/var/run/docker.sock... 现在在您的容器中,您可以使用 docker 命令
  • 你也可以使用信号,见blog.dixo.net/2015/02/…我不喜欢每2秒检查一次的想法,我认为应该有更好的选择

标签: php docker composer-php docker-compose


【解决方案1】:

有几件事可以帮助你;

  • depends_on:它不等待另一个服务完成,它只等到其他服务启动。见:depends_on
  • health_check:在命令返回成功之前不启动服务。见:healthcheck
  • 根据容器/服务的初始化顺序创建一个 shell 脚本。见:startup order

【讨论】:

    猜你喜欢
    • 2019-07-13
    • 1970-01-01
    • 1970-01-01
    • 2020-01-23
    • 2018-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-26
    相关资源
    最近更新 更多