Ruby on rails 如何以编程方式(在Docker上)获取正在运行的容器的容器id?

Ruby on rails 如何以编程方式(在Docker上)获取正在运行的容器的容器id?,ruby-on-rails,docker,amazon-elastic-beanstalk,Ruby On Rails,Docker,Amazon 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 exampl

我有一个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:我的背景是我在弹性豆茎上。。。但我看不出这有什么改变。还不如在本地主机上。。。问题是相同的。

我能够使用
-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

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

viswesn@viswesn-PC1:~$ docker inspect My_First_Docker | grep Id | awk '{print $2}'
"e3824f0121f24dded9792f133344a2d68b46ea13065481c30caf35d0ac6be40e",

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

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

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

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

我知道这个问题很老,但我希望得到比这里更好的答案,我想:

docker ps -q --no-trunc --format="{{.ID}}" --filter "ancestor=image/repo/and:tag"
如果愿意,您可以不使用
:tag
,也可以完全过滤其他内容。输出将是每个匹配容器的完整、未截断的ID。没有列标题或任何其他无关的内容

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