docker - docker inspect -f '{{.Parent}}' 是获取基本镜像 ID 的安全方法吗?

标签 docker

我想在 Docker 容器的基础镜像更改时自动重建它们。这个想法是将当前标记容器的基础镜像 ID 与 Docker Hub 中基础镜像的 ID 进行比较,如果不同,则运行新的构建。

获取最新的基本图像 ID 似乎非常简单:

$ docker pull debian:latest >/dev/null 2&>1; docker images debian:latest -q
sha256:a20fd0d59cf13f82535ccdda818d70b97ab043856e37a17029e32fc2252b8c56
docker inspect有一个名为“Parent”的条目,它似乎包含 FROM 中使用的图像的 ID指示:
$ docker inspect -f '{{.Parent}}' dockertest-1
sha256:a20fd0d59cf13f82535ccdda818d70b97ab043856e37a17029e32fc2252b8c56

由于我真的找不到任何关于此的文档,我想知道我是否应该依靠这些数据来构建我的构建管道。

最佳答案

父引用不指向 FROM 中的基本图像Dockerfile 的一行,它指向图像中最后一层的下一层。如果您的构建只包含一个层,那么这可以是 FROM行,但是在 Dockerfile 中添加第二行会破坏您的脚本。

如果您知道基本图像的标签(此类元信息未存储在图像中,因此您需要在外部对其进行跟踪,可能会为您的图像添加标签),那么您可以搜索 docker history基本图像的当前 sha256 的当前图像。我会使用以下参数来生成一个 ID 列表:

$ docker history --format '{{ .ID }}' --no-trunc $image_id

关于docker - docker inspect -f '{{.Parent}}' 是获取基本镜像 ID 的安全方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45821389/

相关文章:

hadoop - 在 spark 集群模式下运行 zeppelin

linux - Dockerfile 不会以具有 sudo 权限的用户身份运行脚本

linux - 语法错误 : Multiline bash command in dockerfile RUN statement

docker - 我们可以在多个计算机(主机)上运行单个容器吗?

postgresql - 在postgres容器中创建多个数据库

google-app-engine - GAE托管的VM-如果您的项目名称太长,则无法部署

linux - 如何将容器导入到 ACR 并将其配置为 Linux 平台容器?

macos - docker-machine-连接被拒绝错误

linux - --add-host 在 play application docker 容器中失败

docker - Docker:简单的ls命令在docker build中不起作用