寻找一种方便的方式来启动和停止docker-compose应用程序
对于我的每个项目,我都configuration了一个由多个容器组成的docker开发环境。 我经常在项目之间切换。 这需要停止一组容器,并启动另一个容器。 我现在这样做:
$ cd project1 $ docker-compose stop $ cd ../project2 $ docker-compose up -d
所以我需要记住哪个应用程序正在运行, cd
到docker-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
你当然可以超越,使用守护进程,并尝试启动/停止其中的一些给“名称”等,但我想作为脚手架的起点,应该是笑