在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
:显示最新