我得到了最新版本的图像:
docker pull postgres:alpine
我得到这个日志:
alpine: Pulling from library/postgres
a0d0a0d46f8b: Already exists
5034a66b99e6: Pull complete
82e9eb77798b: Pull complete
314b9347faf5: Pull complete
2625be9fae82: Pull complete
5ec8358e2a99: Pull complete
2e9ccfc29d86: Pull complete
2a4d94e5dde0: Pull complete
如何启动基于层的容器a0d0a0d46f8b
?
类似的东西docker run -it --rm a0d0a0d46f8b bash
。但这不是它的工作原理。
PS。我不提供通过标签获取版本的选项,因为实际上我需要一个没有标签的封闭企业映像的解决方案,这里 postgres 仅用作示例。
据我所知,这仅适用于您在当前机器上构建的图像。一旦你完成了
push
/pull
它就不可能了。图像是一组元数据(图像的散列是该元数据的散列),其中包括层列表。支架是不可变的(它只是一些带有哈希的文件结构),这正是几个图像的共同点。例如,如果您查看基于相同版本的多个图像
alpine
,您会发现它们的第一个图像对于所有图像都是相同的。当您在本地创建图像时,对于某些层,docker 也会创建一个图像,这是为了使缓存工作所必需的(如果您使用默认构建器,而不是
buildkit
),这样您就不会做不必要的工作每次构建(并拍摄现成的图像并稍作更改)。docker image inspect
因此,您可以通过从日志或或中获取其哈希值来轻松运行此类图像docker history
。但是一旦你这样做
push
/pull
你不需要缓存并且不需要中间信息,你就只做push
/pull
只最后一个图像及其图层,忽略中间的所有内容。因此,当你调用docker image inspect
/时,docker history
你将看不到图像的哈希值,而只会看到一组图层,并且无法启动它们。关于图像 ID的文章。