如何获取(使用脚本)与docker exec一起使用的ID?

时间:2019-01-08 00:04:35

标签: docker

运行docker映像后,如何以编程方式获取ID,以便可以对该映像执行脚本命令?我认为我想要的ID被称为Container ID,因为它是docker ps命令的输出中列出的方式。

例如,我使用docker run启动图像,运行docker ps命令以获取所需的“ ID”,然后可以运行docker logs或其他命令。

docker run myImage
docker ps
CONTAINER ID  IMAGE       COMMAND     CREATED 
1234567890    myImage     sleep 120   ...

因此,既然我知道容器ID为1234567890,就可以在容器上运行命令。

docker logs 1234567890
docker exec -it 1234567890 bash

如何以编程方式获取该ID(假设当前仅运行该图像的一个实例)。

我尝试了我认为可以执行的命令,但没有成功。

docker inspect --format='{{.Id}}' myImage
sha256:95e11.....

另请参阅https://docs.docker.com/engine/reference/commandline/inspect/#examples

我认为检查人员仅检查“图像”,而不检查正在运行的实例(又称容器)。

我希望我的术语正确,但是如果不告诉我,我会修复它。

注意:如果重要的话,该脚本是Linux上的bash脚本。

3 个答案:

答案 0 :(得分:3)

如果启动分离的容器(docker run -d ...),则Docker客户端将在stdout上发出容器ID。因此,您可以执行以下操作:

$ CONTAINER_ID=$(docker run -d myImage)
$ docker exec $CONTAINER_ID somecommand

如果为容器分配名称,则可以使用该名称代替容器ID:

$ docker run --name myContainer myImage
$ docker exec myContainer somecommand

如果您只想获取最近启动的容器的ID,则可以使用docker ps -lq

$ CONTAINER_ID=$(docker ps -lq)
$ docker exec $CONTAINER_ID somecommand

如果给定映像中只有一个容器在运行,则可以运行以下命令:

$ CONTAINER_ID=$(docker container ps --filter ancestor=myImage -q)
$ docker exec $CONTAINER_ID somecommand

答案 1 :(得分:0)

您也可以通过这种方式

<header class="site-header">
  <div class="wrap">
    <div class="title-area">
      <div id="divL">
        <img id="logo-img" src="https://placehold.it/200x150/fa0" class="attachment-full size-full">
      </div>
      <div id="divR">Some text that should go on right</div>
    </div>
    <nav> .... </nav>
  </div>
</header>

答案 2 :(得分:0)

您可以通过过滤从特定图像创建的容器ID来获取容器ID。

docker ps -qf "ancestor=imagename"

ancestor:过滤器容器,这些容器将给定图像作为祖先共享

-q:仅输出ID

-f:代表filtering

-l:显示最新的