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

  • 本文关键字:docker exec ID 一起 脚本 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脚本。

如果启动一个分离的容器(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

你也可以用这种方式

for container_id in $(docker ps  --filter="name=$myImage" -q -a);do docker rm $container_id;done

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

docker ps -qf "ancestor=imagename"

ancestor:共享给定图像作为祖先的过滤器容器

-q:仅输出ID

-f:用于过滤

-l:显示最新

最新更新