我在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:我的背景是我在弹性豆茎上...但我不知道这是如何改变的。不妨在当地主人身上......问题是一样的。
答案 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
。