动态获取一个由docker-compose创建的运行容器名
Dynamically get a running container name created by docker-compose
当我 运行 我的 docker-compose 时,它会创建一个 web 容器和 postgres 容器。
我想通过
之类的方式手动触发我的 Django 测试 运行
docker-compose run web python manage.py test
问题是它创建了一个新容器(需要应用新的迁移、内务处理等)
我倾向于做类似
的选项
docker exec -i -t <containerid> python manage.py test
这引入了一个新问题,我必须先 运行 docker ps
才能获取容器名称。这样做的重点是自动 运行 每个构建的测试,因此它必须自动化,手动 运行ning docker ps
不是解决方案。
那么有没有办法动态抓取容器id或者有更好的方法来做到这一点?如果您可以在 docker-compose
中分配容器名称,这将不是问题
只需使用docker-compose exec
。它将在 already-running 容器中执行,而不是启动一个新容器。
docker-compose exec web python manage.py test
您可以使用 docker-compose.yml 文件上的 container_name
选项为容器指定名称。
container_name: container_name
然后,您可以轻松地 运行 使用该容器中的命令。
docker exec container_name python manage.py test
.
有关 docker-compose 选项的更多信息,请访问官方文档。
虽然提供了一个可接受的答案,但答案本身与这个问题的标题并没有真正的关系:
Dynamically get a running container name created by docker-compose
要通过docker-compose动态检索容器运行的名称,您可以执行以下命令:
$(docker inspect -f '{{.Name}}' $(docker-compose ps -q web) | cut -c2-)
使用docker-compose ps -q
查找容器的ID和运行其中的命令:
docker exec -it $(docker-compose ps -q) sh
PS:如果 docker-compose 文件中有多个容器,这将不起作用。
当我 运行 我的 docker-compose 时,它会创建一个 web 容器和 postgres 容器。
我想通过
之类的方式手动触发我的 Django 测试 运行docker-compose run web python manage.py test
问题是它创建了一个新容器(需要应用新的迁移、内务处理等)
我倾向于做类似
的选项docker exec -i -t <containerid> python manage.py test
这引入了一个新问题,我必须先 运行 docker ps
才能获取容器名称。这样做的重点是自动 运行 每个构建的测试,因此它必须自动化,手动 运行ning docker ps
不是解决方案。
那么有没有办法动态抓取容器id或者有更好的方法来做到这一点?如果您可以在 docker-compose
中分配容器名称,这将不是问题只需使用docker-compose exec
。它将在 already-running 容器中执行,而不是启动一个新容器。
docker-compose exec web python manage.py test
您可以使用 docker-compose.yml 文件上的 container_name
选项为容器指定名称。
container_name: container_name
然后,您可以轻松地 运行 使用该容器中的命令。
docker exec container_name python manage.py test
.
有关 docker-compose 选项的更多信息,请访问官方文档。
虽然提供了一个可接受的答案,但答案本身与这个问题的标题并没有真正的关系:
Dynamically get a running container name created by docker-compose
要通过docker-compose动态检索容器运行的名称,您可以执行以下命令:
$(docker inspect -f '{{.Name}}' $(docker-compose ps -q web) | cut -c2-)
使用docker-compose ps -q
查找容器的ID和运行其中的命令:
docker exec -it $(docker-compose ps -q) sh
PS:如果 docker-compose 文件中有多个容器,这将不起作用。