寻找一种方便的方式来启动和停止docker-compose应用程序

对于我的每个项目,我都configuration了一个由多个容器组成的docker开发环境。 我经常在项目之间切换。 这需要停止一组容器,并启动另一个容器。 我现在这样做:

$ cd project1 $ docker-compose stop $ cd ../project2 $ docker-compose up -d 

所以我需要记住哪个应用程序正在运行, cddocker-compose.yml所在的目录中,停止它,然后记住我想要运行的其他项目,在那里cd并启动它。

有没有更好的办法? 就像一个logging哪个多容器应用程序的实用程序一样,可以停止正在运行的应用程序并运行另一个应用程序,而无需手动操作和docker-compose

(顺便说一下,一组托pipe单个应用程序的容器的正确术语是什么?)

希望docker-compose-ui将帮助你pipe理应用程序。

我认为这里真正的问题是这样的:

这需要停止一组容器,并启动另一个容器。

您不应该停止一个项目来启动另一个项目。

根本不映射任何端口,而不是映射到相同的主机端口。 然后使用脚本来查找容器的IP,并直接连接到:

 #!/bin/bash cip=$(docker inspect -f '{{range $key, $value := .NetworkSettings.Networks}} {{ $value.IPAddress}} {{end}}' $1) 

这将查找容器IP。 结合使用一个命令打开url:

 url=http://cip:8080/ xdg-open $url || open $url 

所有这一切,这将让你运行应用程序,而不必映射任何主机端口。 当主机端口不存在时,您不必停止其他项目。

如果你是rubycertificate了一点,你可以使用脚手架。

一个使用线程的准系统示例(在没有一个进程的情况下启动不同的docker-compose会话,然后将它们全部停下来)

 require 'docker-compose' threads = [] project_paths = %w(/project/path1 /project/path2 /project/path3 /project/path) project_paths.each do |path| threads.push Docker::Compose::Session.new(dir:compose_base_path1) end begin threads.each do |thread| thread.join end rescue SystemExit, Interrupt threads.each do |thread| thread.kill end rescue Exception => e handle_exception e end 

资源

它用

  • docker工人组成gem
  • 线程

只需将project_paths设置为项目的文件夹。 如果你想全部结束,使用CTRL + c

你当然可以超越,使用守护进程,并尝试启动/停止其中的一些给“名称”等,但我想作为脚手架的起点,应该是笑