【问题标题】:How to get container id of running container programmatically (on Docker)?如何以编程方式(在 Docker 上)获取运行容器的容器 ID?
【发布时间】:2015-10-12 18:02:08
【问题描述】:

我在 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:我的上下文是我在弹性豆茎上......但我看不出这会如何改变任何东西。还不如在本地主机上...问题是一样的。

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      您可以将docker ps 与过滤器一起使用,以仅查看派生自特定图像的容器:

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

          我可以使用-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
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-09-13
            • 2021-06-23
            • 1970-01-01
            • 2019-06-29
            • 2020-11-22
            • 1970-01-01
            • 2020-02-05
            • 1970-01-01
            相关资源
            最近更新 更多