如何以编程方式获取运行容器的容器ID(在Docker上)?

时间:2015-07-22 17:41:46

标签: ruby-on-rails docker elastic-beanstalk

我在docker设置中有一个应用程序。我想在主机上运行一个脚本,该脚本将在现有(运行容器)中运行一些命令。

如果我知道容器ID,请说...它的50250e572090 ...然后我可以像这样运行脚本

例如......

#!/usr/bin/env bash
docker exec 50250e572090 example_command_1_here
docker exec 50250e572090 example_command_2_here
docker exec 50250e572090 example_command_3_here
docker exec 50250e572090 example_command_4_here

工作得很好! ...但这里的事情是我只知道图像名称...而不是容器ID。要找到容器ID ...我使用docker ps ...我得到这样的东西......

CONTAINER ID        IMAGE                              COMMAND             CREATED             STATUS              PORTS               NAMES
50250e572090        aws_beanstalk/staging-app:latest   "/sbin/my_init"     29 hours ago        Up 29 hours         80/tcp, 443/tcp     drunk_bardeen 

它的输出不是我可以使用的东西(穿透)。我可以运行哪个命令来获取容器ID作为输出,然后可以通过管道输入脚本?或者现在我清楚我想要实现的目标......有更好的方法吗?

Ps:我的背景是我在弹性豆茎上...但我不知道这是如何改变的。不妨在当地主人身上......问题是一样的。

4 个答案:

答案 0 :(得分:1)

我能够使用-q标志实现此目的。像这样......

#!/usr/bin/env bash
docker exec `docker ps -q` example_command_1_here
docker exec `docker ps -q` example_command_2_here
docker exec `docker ps -q` example_command_3_here
docker exec `docker ps -q` example_command_4_here

答案 1 :(得分:1)

您要求的并不是那么容易。多个容器可以使用相同的图像。

您可以使用带有过滤器的docker ps来查看从特定图片派生的容器:

$ docker ps -q --filter "ancestor=aws_beanstalk/staging-app:latest"

请注意,这将使用aws_beanstalk/staging-app:latest图像返回所有正在运行的容器,该图像可能更多而不是一个。

答案 2 :(得分:0)

您可以运行docker inspect命令并获取容器的ID;

 Product_name |  category_id

   Nutella      |  dessert,chocolate
   Milk         |  diary,milk

答案 3 :(得分:0)

我知道这个问题很旧,但是我想要一个比这里给出的更好的答案,我想出了答案:

docker ps -q --no-trunc --format="{{.ID}}" --filter "ancestor=image/repo/and:tag"

如果需要,可以不使用:tag,也可以完全过滤其他内容。输出将是每个匹配容器的完整,未截断的ID。没有列标题或其他无关的东西。

如果您只需要ID的短版(前十二个十六进制数字),请省略--no-trunc