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

如何(使用脚本)获取docker exec使用的ID?,docker,Docker,在docker映像运行之后,如何以编程方式获取ID,以便为该映像编写命令脚本?我想我想要的ID被称为容器ID,因为这就是它在docker ps命令的输出中列出的方式 例如,我使用docker run启动图像,我运行docker ps命令来获取我想要的“ID”,然后我可以运行docker log或其他命令 docker run myImage docker ps CONTAINER ID IMAGE COMMAND CREATED 1234567890 myImage

在docker映像运行之后,如何以编程方式获取ID,以便为该映像编写命令脚本?我想我想要的ID被称为
容器ID
,因为这就是它在
docker ps
命令的输出中列出的方式

例如,我使用
docker run
启动图像,我运行
docker ps
命令来获取我想要的“ID”,然后我可以运行
docker log
或其他命令

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.....
另见

我认为inspect只检查“映像”,而不是正在运行的实例(即容器)

我希望我有正确的术语,但如果不让我知道,我会解决它


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

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

$ CONTAINER_ID=$(docker run -d myImage)
$ docker exec $CONTAINER_ID somecommand
$ CONTAINER_ID=$(docker container ps --filter ancestor=myImage -q)
$ 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 run -d myImage)
$ docker exec $CONTAINER_ID somecommand
$ CONTAINER_ID=$(docker container ps --filter ancestor=myImage -q)
$ docker exec $CONTAINER_ID somecommand

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

$ CONTAINER_ID=$(docker run -d myImage)
$ docker exec $CONTAINER_ID somecommand
$ CONTAINER_ID=$(docker container ps --filter ancestor=myImage -q)
$ 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 run -d myImage)
$ 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

你也可以这样做

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

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

docker ps -qf "ancestor=imagename"
祖先
:筛选作为祖先共享给定图像的容器

-q
:仅输出ID

-f
:用于


-l
:显示最新的

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

docker ps -qf "ancestor=imagename"
祖先
:筛选作为祖先共享给定图像的容器

-q
:仅输出ID

-f
:用于


-l
:显示最新的运行
docker inspect myImage
将为您提供有关映像的信息,而不是您启动的容器的信息。为什么不直接为容器实例()指定名称?您可以按名称在容器实例上执行命令。@Ass3mbler,谢谢您的建议。我在谷歌上搜索,发现这也很有帮助。@PatS很高兴它有帮助!:)运行
docker inspect myImage
将为您提供有关映像的信息,而不是您启动的容器的信息。为什么不直接为容器实例()指定一个名称?您可以按名称在容器实例上执行命令。@Ass3mbler,谢谢您的建议。我在谷歌上搜索,发现这也很有帮助。@PatS很高兴它有帮助!:)