【发布时间】:2017-04-30 23:53:01
【问题描述】:
假设我有 2 个容器:composer 和 php,它们共享相同的代码库,即相同的卷。我想用一个像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 events如docker 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秒检查一次的想法,我认为应该有更好的选择
-
另见 AmanicA stackoverflow.com/questions/31746182/… 和 wait-for-it github.com/vishnubob/wait-for-it 的想法
标签: php docker composer-php docker-compose