我是否可以针对可以返回图像操作系统的docker注册表(公共和私有)运行命令?具体来说,我希望区分Linux和Windows图像,而不是Linux发行版之间。
原因是我们今天有一个基于docker的构建系统,我们正在尝试添加对Windows容器和LCOW的支持。理论上,Linux构建可以在Windows或Linux服务器上进行,因此我们希望该工具能够在docker命令上自动添加sudo
并在pull / run命令上自动添加--platform
(如以及其他一些事情)在适当的时候。但是,这要求我们自动检测图像的操作系统。我查看了docker文档,但无法找到对此类查询的任何支持,但也许我错过了一些内容。
在我写这篇文章时,我意识到如果docker客户端可以自动推断出图像的操作系统,他们可能会将这种检测内置到客户端而不是引入新的{{1所有各种docker命令的参数。
答案 0 :(得分:3)
删除旧答案,因为它不正确。
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>
下可用的泊坞窗图片信息,您会发现它看起来像这样:
{
"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有点记录在案,并且这些信息来自哪里并不明显。以直截了当的方式提供这些信息似乎是上游的一个漏洞: