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

问题描述 投票:0回答:5

当我运行 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 中分配容器名称,这将不是问题

docker docker-compose circleci
5个回答
33
投票

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

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

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

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

10
投票

您可以使用 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/


8
投票

只需使用

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

docker-compose exec web python manage.py test

3
投票

使用

docker-compose ps -q
查找容器的 ID 并运行其中的命令:

docker exec -it $(docker-compose ps -q) sh

PS:如果 docker-compose 文件中有多个容器,这将不起作用。


0
投票

受到 Toni Van de Voorde 答案的启发,我找到了一种更简单的方法来获取 docker compose 服务的容器名称:

docker compose ps --format '{{.Name}}' <service_name>

例如,如果服务名为“app”:

docker compose ps --format '{{.Name}}' app
© www.soinside.com 2019 - 2024. All rights reserved.