我将我的容器分散到多个docker-compose.yml
文件中(https://docs.docker.com/compose/extends/)。它们根据项目是分开的,但是所有项目都使用几个容器。我有一个简洁的shell脚本,可以让我轻松地一次启动几个项目:
./myscript.sh up project1 project2
执行:
docker-compose up -d -f shared/docker-compose.yml -f project1/docker-compose.yml -f project2/docker-compose.yml project1 project2
这将启动容器project1
,project2
和在定义的几个共享撰写文件,例如shared-db
,shared-apache
。
现在,我想在外壳脚本中添加杀死容器的选项:
./myscript.sh kill
应该执行:
docker kill project1 project2 shared-db shared-apache
问题是获取我的容器列表。我当前的方法是使用docker ps --format '{{.Names}}'
,这并不理想,因为它还会列出不属于这些项目的容器。
我也尝试过使用docker-compose kill
,它需要分别为每个docker-compose.yml
文件执行。我遍历了所有文件,它对第一个文件有效,但对第二个文件抛出错误:
ERROR: Service 'project1' depends on service 'shared-db' which is undefined.
引发错误是因为project1/docker-compose.yml
具有依赖关系,shared/docker-compose.yml
并且由于shared
已被杀死而无法满足。
想到的唯一方法就是以某种方式遍历所有docker-compose.yml
文件并获得在那里定义的所有容器名称的列表,但是我没有找到任何适当的方法来解析yml
bash中的文件。
services:
db:
image: ...
container_name: shared-db
apache:
image: ...
container_name: shared-apache
从以上的内容中yml
,我必须得到名字shared-db
和名字shared-apache
。
只需使用docker-compose kill
:
docker-compose -f shared/docker-compose.yml -f project1/docker-compose.yml -f project2/docker-compose.yml kill
该选项-f
应位于之前的命令之前docker-compose
,这样它将被解析为包含文件。您可以通过docker-compose
这种方式使用所有可能的命令。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句