如何通过Docker CLI获取DockerHub镜像标签对应的可用SHA-256值
如何获取可用于Dockerfile FROM指令的镜像SHA-256摘要?
你之前用docker images ubuntu:22.04 --format "{{.ID}}" --no-trunc拿到的SHA值没法用在FROM ubuntu@$ID里,因为这个命令返回的是镜像自身的本地ID,而Dockerfile的FROM指令需要的是镜像的manifest digest(Docker Hub上标识镜像的全局唯一摘要)。
正确的命令
要获取能直接用于FROM指令的SHA-256值,使用以下命令:
- 获取完整的
镜像@sha256:xxx格式(可直接复制到FROM语句中):
docker inspect --format='{{index .RepoDigests 0}}' ubuntu:22.04
执行后会返回类似结果:ubuntu@sha256:df5de72bdb3b711aba4eca685b1f42c722cc8a1837ed3fbd548a9282af2d836d
- 如果只想单独提取SHA-256字符串:
docker inspect --format='{{index .RepoDigests 0}}' ubuntu:22.04 | cut -d'@' -f2
为什么原来的命令不行?
docker images --no-trunc返回的ID是本地镜像的唯一标识,但这个值和Docker Hub上的manifest digest不是同一概念。Docker拉取镜像时,需要用manifest digest匹配远端仓库的镜像元数据,使用本地镜像ID会导致元数据加载失败,也就是你遇到的报错。
正确使用示例
如果要通过build-arg传递摘要,修改后的构建命令:
docker build . \ --tag shell \ --build-arg IMAGE_DIGEST=$(docker inspect --format='{{index .RepoDigests 0}}' ubuntu:22.04)
对应的Dockerfile:
ARG IMAGE_DIGEST FROM $IMAGE_DIGEST RUN apt-get update -y \ && apt-get install -y jq git curl
内容的提问来源于stack exchange,提问作者ams
相关产品推荐
相关产品推荐

