如何在Jenkins中获取Docker镜像的ID?

12
我需要通过Jenkins运行docker容器。为此,我使用了"启动/停止Docker容器"作为构建步骤。
启动/停止Docker容器
Action to choose        : Run container
Docker Cloud name       : docker_demo
ID                      : DOCKER_IMAGE_ID
DNS     
Port bindings           :port
Bind all declared ports :   
Hostname                : ip address

在运行作业时,提示“无效的ID”。有人能建议一下,在Jenkins中如何获取Docker镜像ID吗?


难道不只是像 ubuntu:latest 这样的镜像名称吗? - Kevin Simper
1
不是的。实际上我使用 Docker 创建了一个镜像(在 Jenkins 作业执行时创建),并将其存储在本地仓库中。现在我需要检索该镜像的 ID。那么如何检索它呢? - Jithin Justice
你解决这个问题了吗?从问题中看来,你可能对容器和镜像的区别感到困惑。 - Flavin
4个回答

20

根据 Docker文档,整理出以下一句话:

sudo docker images --filter=reference=image_name --format "{{.ID}}"

image_name替换为您实际的Docker映像名称。 您可以将该值存储在shell变量中,以便稍后引用:

IMAGE_ID=$(sudo docker images --filter=reference=image_name --format "{{.ID}}")

然后使用$IMAGE_ID访问它。


1
请不要忘记在结尾加上括号:IMAGE_ID=$(docker images --filter=reference=image_name --format "{{.ID}}") - Tabaraei
谢谢你提醒我 @Tabaraei,我已经修复了。 - amiabl

11

这里也需要使用--no-trunc。 - Jason

3
您可以使用以下命令查看Docker镜像的ID(对于您构建或从Docker Hub获取的镜像):docker images 更新:根据OP的评论,docker images --filter 只实现了dangling=true,因此您无法使用此方法搜索容器ID。因此,您将不得不依赖shell脚本,这里是一个示例:
docker images | grep -E '^golang.*latest' | awk -e '{print $3}' 

您需要调整grep中的正则表达式以匹配您的图像名称和标签。


1
是的,我已经这样做了。但它是静态的。(每次需要更改ID,如果图像内容被修改)。我需要一个动态ID(某种变量),以便它可以自动从存储库中获取更新后的图像ID。 - Jithin Justice
2
docker images --filter 现在支持按引用搜索 $ docker images --filter=reference='busy*:*libc',还可以选择输出格式,请参阅文档 - herm

0
docker ps -a --format "{{.ID}}" | head -1

占位符

.ID

.存储库

.标签

.摘要

.创建自

.创建于

.大小


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接