繁体   English   中英

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

[英]How to get container id of running container programmatically (on Docker)?

我在 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 ps来仅查看从特定图像派生的容器:

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

请注意,这将返回使用所有运行集装箱aws_beanstalk/staging-app:latest ,这可能是一个以上的图像。

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

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

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

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

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

如果您只需要 ID 的简短版本(前十二位十六进制数字),请不要使用--no-trunc

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM