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

时间:2017-01-12 21:41:45

标签: docker docker-compose circleci

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

我想手动触发我的Django测试,通过类似

的方式运行
docker-compose run web python manage.py test

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

我倾向于选择

这样的选项
docker exec -i -t <containerid> python manage.py test

这引入了一个新问题,即我必须首先运行docker ps来获取容器名称。这一点的重点是自动运行每个构建的测试,因此必须自动运行,手动运行docker ps不是解决方案。

那么有没有办法动态获取容器ID或者有更好的方法吗?如果您可以在docker-compose

中分配容器名称,那么这不会成为问题

3 个答案:

答案 0 :(得分:3)

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

docker-compose exec web python manage.py test

答案 1 :(得分:3)

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

container_name: container_name

然后,您可以使用。

轻松地在该容器中运行命令

docker exec container_name python manage.py test

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

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

答案 2 :(得分:2)

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

  

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

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

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