我可以针对可以返回镜像操作系统的 docker 注册表(公共(public)和私有(private))运行任何命令吗?具体来说,我希望区分 Linux 和 Windows 镜像,而不是 linux 发行版。
原因是我们今天有一个基于 docker 的构建系统,我们正在尝试添加对 Windows 容器和 LCOW 的支持。理论上,Linux 构建可以在 Windows 或 Linux 服务器上进行,因此我们希望该工具能够自动添加 sudo
在 docker 命令和 --platform
在适当的时候在拉/运行命令(以及其他一些东西)上。但是,这需要我们自动检测图像的操作系统。我查看了 docker 文档,但找不到对此类查询的任何支持,但也许我错过了一些东西。
在我写这篇文章的时候,我意识到如果 docker 客户端可以自动推断出图像的操作系统,他们可能会在客户端中构建这个检测而不是引入新的 --platform
。所有各种 docker 命令的参数。
最佳答案
删除旧答案,因为它不正确。
Project Atomic 有一个名为“skopeo”的工具,可以满足您的需求。 Here's a link to the github repository
安装该工具后,您应该能够执行以下操作:
$ skopeo inspect docker://docker.io/microsoft/nanoserver | jq '.Os'
"windows"
$ skopeo inspect docker://docker.io/library/ubuntu | jq '.Os'
"linux"
背景:
如果您查看
/var/lib/docker/image/<storage-driver>/imagedb/content/sha265/<image-sha>
下提供的 docker 图像信息,你会发现它看起来像这样:{
"architecture": "amd64",
"config": {
...
},
"container": "6e8eb576ec0f7564a85c0fbd39824e0e91c031aa0019c56c5f992449e88d1142",
"container_config": {
...
},
"created": "2018-03-06T22:17:26.531075062Z",
"docker_version": "17.06.2-ce",
"history": [
...
],
"os": "linux",
"rootfs": {
"type": "layers",
"diff_ids": [
"sha256:a94e0d5a7c404d0e6fa15d8cd4010e69663bd8813b5117fbad71365a73656df9",
"sha256:88888b9b1b5b7bce5db41267e669e6da63ee95736cb904485f96f29be648bfda",
"sha256:52f389ea437ebf419d1c9754d0184b57edb45c951666ee86951d9f6afd26035e",
"sha256:52a7ea2bb533dc2a91614795760a67fb807561e8a588204c4858a300074c082b",
"sha256:db584c622b50c3b8f9b8b94c270cc5fe235e5f23ec4aacea8ce67a8c16e0fbad"
]
}
}
如您所见,有一个可用的字段名为
os
,也就是说 linux
.我怀疑如果您查看该字段以获取 Windows 图像,它会显示 windows
.这是可通过 docker inspect
获得的信息.棘手的一点是弄清楚要对
docker.io
进行哪些 API 调用。获取此信息。 docker hub/registry API 的文档记录有些不足,而且这些信息的确切来源并不明显。以直接的方式提供这些信息似乎是上游的一个开放错误:Proposal: inspect image json on a registry
关于docker - 我可以查询远程 docker 注册表以获取图像信息(例如操作系统)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50043492/