动态获取由docker-compose创建的正在运行的容器名称

dav*_*vid 5 docker circleci docker-compose

当我运行docker-compose时,它会创建一个Web容器和postgres容器。

我想通过类似的方式手动触发我的Django测试运行

docker-compose run web python manage.py test
Run Code Online (Sandbox Code Playgroud)

问题是它创建了一个新容器(需要应用新的迁移,内部管理工作等)

我倾向于的选择是做类似的事情

docker exec -i -t <containerid> python manage.py test
Run Code Online (Sandbox Code Playgroud)

这引入了一个新问题,即我必须先运行docker ps才能获取容器名称。这样做的全部目的是为每个构建自动运行测试,因此它必须是自动化的,手动运行docker ps不是解决方案。

那么,有没有一种方法可以动态获取容器ID,或者有更好的方法来做到这一点?如果您可以在docker-compose中分配容器名称,则不会有问题

Ton*_*rde 9

虽然提供了可接受的答案,但答案本身与该问题的标题并不真正相关:

动态获取由docker-compose创建的正在运行的容器名称

要动态检索由docker-compose运行的容器的名称,可以执行以下命令:

$(docker inspect -f '{{.Name}}' $(./devbox docker-compose ps -q web) | cut -c2-)
Run Code Online (Sandbox Code Playgroud)


Dan*_*owe 7

只需使用docker-compose exec. 它将在已经运行的容器中执行,而不是启动一个新的容器。

docker-compose exec web python manage.py test
Run Code Online (Sandbox Code Playgroud)


kst*_*aos 5

您可以使用container_namedocker-compose.yml 文件上的选项为容器指定名称。

container_name: container_name

然后,您可以轻松地使用在该容器中运行命令。

docker exec container_name python manage.py test.

有关 docker-compose 选项的更多信息,请访问官方文档。

https://docs.docker.com/compose/compose-file/